Mobx
Simple, scalable state management –简单、可扩展的状态管理。
It is inspired by MVVM frameworks like in MeteorJS tracker, knockout and Vue.js.
Mobx Install
|
|
Mobx是通过观察者模式实现的,相对Redux他写起了让人更加的容易理解和轻松。
几个主要的Api
如果使用过Vue那么下面几个Api非常容易理解。
observable
observable 是Mobx中最重要的Api。作用是声明一个值被订阅。
Usage:
observable(value)
@observable classProperty = value
(如果使用装饰器,需要使用babel的插件,先问将介绍)value
的值可以是JavaScript的基础类型,也可以是Object、Array、Map
如果value
是map,则回返回一个Observable Map类型的变量
如果value
是array,则回返回一个Observable Array 类型的变量
如果value
是Object,则回返回一个Observable Object类型的变量
observer
如果要在React中使用mobx,需要对组件使用observer
autorun
当observable(value)
说的到的值发生了change
,如果autorun
函数订阅了这个值,则autorun
这个函数会被执行。
- 使用
console.log
时是非常好用的。 - 如果监听一个值实时提交数据,
autorun
也是非常好用的。但是这种情况我更加推荐使用autorunAsync
1234567891011var number = observable(1);autorun(()=>console.log(number.get()))// Print 1 第一次是因为初始化number.set(0)// Print 0number.set(2)// Print 2number.set(3)// Print 3number.set(3)// Print Nothing
computed
返回通过计算得出的结果
TodoList实战
|
|
如果不用Mobx直接中setState,而改变completed
属性的方法,需要类似于forEach
这样的方法。也涉及到子组件向父组件的通讯。
将state的值抽象出来,封装成类。
在这里抽象出了两个类: TodoListStore
Todo
,通过类中的方法来进行状态的改变
可以看到这整段代码的执行过程中没有一个setState操作。