mobx 能干什么
使用 react 写小型应用,数据、业务逻辑和视图的模块划分不是很细是没有问题的。在这个阶段,引入任何状态管理库,都算是奢侈的。但是随着页面逻辑的复杂度提升,在中大型应用中,数据、业务逻辑和视图,如果不能很好的划分,就很有可能出现维护难、性能低下的问题。
业内比较成熟的解决方案有 redux,但是 redux 使用过程中,感觉较复杂和繁琐。那么为什么不简单一点呢?mobx 的核心理念是 简单、可扩展的状态管理库。这可能正是你想要的。
react 关注的状态(state)到视图(view)的问题。而 mobx 关注的是状态仓库(store)到的状态(state)的问题。
核心的概念1
mobx 最最核心的概念只有2个。 @observable 和 @observer ,它们分别对应的是被观察者和观察者。这是大家常见的观察者模式,不过这里使用了,ES7 中的 装饰器。
使用 @observable 可以观察类的值。
这里使用 @observable 将 Store 的 todos 变为一个被观察的值。
observable
仓库
// 这里引入的是 mobx
import {observable} from 'mobx';
class Store {
@observable todos = [{
title: "todo标题",
done: false,
}];
}
observer
mobx 组件
然后再使用 @observer ,将组件变为观察者,响应 todos 状态变化。
当状态变化时,组件也会做相应的更新。
// 这里引入的是 mobx-react
import {observer} from 'mobx-react';
@observer
class TodoBox extends Component {
render() {
return (
<ul>
{
this.props.store.todos.map(todo => <li>{todo.title}</li>)}
</ul>
)
}
}
完整的 demo 如下。
import React, {Component} from 'react';
import { render } from 'react-dom';
import {observable} from 'mobx';
import {observer} from 'mobx-react';