【发布时间】:2017-06-02 07:02:26
【问题描述】:
我的项目是基于 React 构建的,并且使用 Mobx 进行状态管理。 我们没有使用装饰器,所以需要观察 observables 的组件需要用如下方式包装:
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 在这种情况下是可观察的,它看起来像这样:
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}/>;
});
但这并不稳定。 是否有有效的解决方法来避免这种情况?
【问题讨论】: