最近老大让我用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 {
0; num1 =
0; num2 =
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>
)
}
}