私のプロジェクトはReactに基づいて構築されており、状態管理のためにMobxが使用されています。 私たちは、デコレータを使用していないので、観測を観察する必要があるコンポーネントは、次のようにラップする必要がありますMobX observables changeが常にオブザーバコンポーネントをトリガするとは限りません。
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}/>;
});
コンポーネントMyComponent
が小道具として観測を受けている:
static propTypes() {
return {
myFilter: React.PropTypes.function.isRequired
};
}
そしてそれはrenderメソッドで使用されます。この場合には
render() {
if (this.props.myFilter.filterValue1 !== null) {
// some code here
}
}
myFilter
はwhic、観測可能です時間は何とか次のようになります。この場合
import {observable} from 'mobx';
const myFilter = observable({
filterValue1: null,
filterValue2: null,
addOrRemoveItem() {
// some function here
}
});
export default myFilter;
、いくつかのコンポーネントがmyFilter
を変更した場合、小道具として、観察を受けオブザーバーMyComponent
は、常に再レンダリングされません。場合によっては、これはコンポーネントの呼び出しの前に属性によって観測可能なオブジェクトに対処することで解決できます。例:
export default observer(() => {
console.log(myFilter.filterValue1);
return <MyComponent filter={myFilter}/>;
});
これは安定していません。 これを回避する有効な回避策がありますか?
giusとAlikに感謝します。もちろんレンダリングの問題を解決します。考えているのは、すべての観測用ラッパーを1か所に置き、保守を容易にし、クラスをそのまま残しておくことでした。しかし、おそらくクラスのオブザーバーを宣言することが唯一の方法です。 – Ananas