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.boundincrement() {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)()
