mobx中observable数据更新,响应式组件未更新
先上代码,说明问题:
store:
@observable toDoLists = []
@computed get toDos() {
const [ALL, DONE, UNDONE] = this.filterTypes;
switch (this.filterType) {
case DONE:
return this.toDoLists.filter(item => !!item.done)
case UNDONE:
return this.toDoLists.filter(item => !item.done)
case ALL:
default:
return this.toDoLists;
}
}
@action.bound addToDo(text) {
this.toDoLists.unshift({
text,
id: Date.now(),
done: false
})
console.log('todo list', this.toDos, this.toDoLists)
}
响应式组件:
@observer
class ToDolist extends Component {
render() {
const { toDos, handleChange } = this.props.store;
return (
<ul className={list_ul}>
{
toDos.length
? toDos.map(item => {
return <ListItem
key={item.id}
{...item}
handleChange={handleChange}
/>
})
: <h3>your to do list is empty</h3>
}
</ul>
);
}
}
问题描述: 执行addToDo可以打印最新的toDos数据,但是ToDoList组件并未更新
解决方案:1 使用mobx中的makeObservable方法 2 降低mobx的版本(当前使用的版本mobx:^6.3.2,mobx-react:7.2.0)
备注:此方案参考吃柠檬的猫的博客
方案1代码如下:
class ToDoStore {
constructor() {
makeObservable(this);
}
}
export default new ToDoStore();