MobX文档建议我应该observer在所有组件上使用。但是,通过使用注入,我可以更精细地控制哪些数据导致组件的重新呈现。
我的理解是,有了observer,即使上一个可观察的对象嵌套在数据存储区的深处,上次渲染中所有访问的可观察的对象的更改也会导致重新渲染,而inject只有在注入器函数中访问的可观察对象发生更改时才重新渲染。
例如:
class Store{
@observable data = {
nestedData: {
deepData: 'my_data'
}
}
}
const store = new Store();
... Assume the store is injected using <Provider /> component
// This will cause re-render when the data object changes
// for example: store.data = { new_data: 'new_data' }
@inject(stores => {
return { data: stores.dataStore.data };
})
class MyComponent extends Component { }
// This will re-render on change of the data …Run Code Online (Sandbox Code Playgroud)