最近老大让我用Mobx编写供应商系统,写着代码看着文档很心累,现在写完了第一版本,mobx也算用的顺手了,今天整理了mobx的一些基础知识点,以供需要时瞄瞄!!!
MobX 是一个库,使得状态管理变得简单和可扩展。
MobX 支持单向数据流,也就是动作改变状态,而状态的改变会更新所有受影响的视图。
当状态改变时,所有衍生都会进行原子级的自动更新。因此永远不可能观察到中间值。
一般需要掌握以下四点就可以熟练的使用Mobx
@observer
函数/装饰器可以用来将 React 组件转变成响应式组件。
它用
mobx.autorun包装了组件的 render 函数以确保任何组件渲染中使用的数据变化时都可以强制刷新组件。observer是由单独的mobx-react包提供的。@observable
装饰器使状态变成可观察的
@observable classProperty = value@computed
计算值(computed values)是可以根据现有的状态或其它计算值衍生出的值。
如果你想响应式的产生一个可以被其它 observer 使用的值,请使用
@computed。computed还可以直接当做函数来调用。 在返回的对象上使用.get()来获取计算的当前值,或者使用.observe(callback)来观察值的改变。 这种形式的computed不常使用,但在某些情况下,你需要传递一个“在box中”的计算值时,它可能是有用的。@action
动作是用来修改状态的,应该永远只对修改状态的函数使用动作。
建议对任何修改 observables 或具有副作用的函数使用
@action。 结合开发者工具的话,动作还能提供非常有用的调试信息。runInAction是个简单的工具函数,它接收代码块并在(异步的)动作中执行。这对于即时创建和执行动作非常有用,例如在异步过程中。runInAction(f)是action(f)()的语法糖。例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32import { observable, computed, action } from "mobx";
import { observer } from 'mobx-react'
class testComponent extends React.Component {
num1 = 0;
num2 = 0;
get total() {
return this.num1 + this.num2;
}
onChangeNum1 = (event) => {
this.num1 = event.target.value
}
onChangeNum2 = (event) => {
this.num2 = event.target.value
}
render() {
return(
<div>
Num1: <input type="text" onChange={this.onChangeNum1}/>
NUm2: <input type="text" onChange={this.onChangeNum2}/>
Show count: <span>{this.total}<span>
</div>
)
}
}