Mon projet est construit sur React, et pour la gestion de l'État MOBX est utilisé. Nous n'utilisent pas les décorateurs, de sorte que les composants qui doivent observer les observables, doivent être emballés de la manière suivante:MOBX changement ne observables déclenchent pas toujours des composants d'observateurs rendent
import React from 'react';
import {observer} from 'mobx-react';
import MyComponent from '../app/my-component.jsx';
import myFilter from './my-filters.jsx';
export default observer(() => {
return <MyComponent filter={myFilter}/>;
});
Le composant MyComponent
reçoit le observables comme accessoires:
static propTypes() {
return {
myFilter: React.PropTypes.function.isRequired
};
}
Et il est utilisé dans la méthode render:
render() {
if (this.props.myFilter.filterValue1 !== null) {
// some code here
}
}
myFilter
dans ce cas est l'observable, WHIC h ressemble en quelque sorte comme ceci:
import {observable} from 'mobx';
const myFilter = observable({
filterValue1: null,
filterValue2: null,
addOrRemoveItem() {
// some function here
}
});
export default myFilter;
Dans ce cas, si un composant modifie myFilter
, l'observateur MyComponent
qui reçoit l'observable comme accessoires, ne re-rend pas toujours. Dans certains cas, cela peut être résolu en adressant l'objet observable par attribut avant l'appel du composant. E.g .:
export default observer(() => {
console.log(myFilter.filterValue1);
return <MyComponent filter={myFilter}/>;
});
Mais ce n'est pas stable. Existe-t-il une solution de contournement valide pour éviter cela?
Merci Gius et Alik, que bien sûr résout le problème de rendu. La pensée était de mettre tous les emballages d'observation en un seul endroit pour un entretien plus facile, laissant ainsi les classes telles quelles.Mais probablement déclarer les observateurs des classes est la seule voie à suivre. – Ananas