action
用法:
action(fn)
action(name, fn)
@action classMethod() {}
@action(name) classMethod () {}
@action boundClassMethod = (args) => { body }
@action(name) boundClassMethod = (args) => { body }
@action.bound classMethod() {}
操作应该且始终用于修改状态的函数。刚刚进行查找窗口功能,过滤器等应不被标记为行动; 允许MobX跟踪他们的调用。
“强制执行操作”强制所有状态修改都由操作完成。在较大的长期代码库中,这是一种有用的最佳实践。
约束行动
的action
装饰/功能遵循正常规则在JavaScript结合。但是,action.bound
可以用于自动将操作绑定到目标对象。需要注意的是不像action
,(@)action.bound
并不需要名称参数,所以这个名字将永远是基于哪个动作绑定的属性名称。
例:
class Ticker {
@observable tick = 0
@action.bound
increment() {
this.tick++ // 'this' will always be correct
}
}
const ticker = new Ticker()
setInterval(ticker.increment, 1000)
注意:不要使用带箭头功能的_action.bound ; 箭头功能已经绑定,无法反弹。_
runInAction(name?, thunk)
runInAction
是一个简单的实用程序,它采用代码块并在(匿名)操作中执行。这对于动态创建和执行操作很有用,例如在异步过程中。runInAction(f)
是糖action(f)()