mobx
https://cn.mobx.js.org/
介绍
- Mobx是一个功能强大,上手非常容易的状态管理工具。
- Mobx背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。
- Mobx利用getter和setter来收集组件的数据依赖关系,从而在数据发生变化的时候精确知道哪些组件需要重绘,在界面的规模变大的时候,往往会有很多细粒度更 新。
Mobx与redux的区别
- Mobx写法上更偏向于OOP
- 对一份数据直接进行修改操作,不需要始终返回一个新的数据
- 并非单一store,可以多store
- Redux默认以JavaScript原生对象形式存储数据,而Mobx使 用可观察对象
优点
缺点
- 过于自由:Mobx提供的约定及模版代码很少,代码编写很自由,如果不做一些约定,比较容易导致团队代码风格不统一
- 相关的中间件很少,逻辑层业务整合是问题。
observable
import {observable} from 'mobx'
.box
const store = observable.box(true) //生成一个可以观察的布尔值,box只能观察简单数据类型
.map
const store = observable.map({
isShow:true,
age:12,
roleList:[],
rightList:[]
})
//如果要观察复杂数据类型,需要用map方法
autorun
import {autorun} from 'mobx'
import store from '../../mobx/store'
autorun(()=>{
console.log(store.get())
})
实例
import { observable, autorun } from 'mobx';
const value = observable.box(0);
const number = observable.box(100);
autorun(() => {
console.log(value.get());
});
value.set(1);
value.set(2);
number.set(101);
//0,1,2。 // autorun 使用到才能被执行
//只能是同步,异步需要处理
//观察对象,通过map
const map = observable.map({ key: "value"});
//map.set("key", "new value");
//map.get("key")
//观察对象,不通过map
const map = observable({ key: "value"});
// map.key map.key="xiaoming"
//观察数组
const list = observable([1, 2, 4]);
list[2] = 3;
mobx取消绑定
componentWillMount () {
this.cancel = autorun(()=>{
this.setState({
isShow:store.get('isShow')
})
})
}
componentWillUnMount () {
this.cancel()
//或者直接更改setState函数,这样就不会触发上一个组件销毁,但上一个组件中定义的autorun没销毁,导致进行setState操作,但上个组件已经销毁,因此会报一个warning:无法设置一个状态到unmount的组件
}