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并不需要名称参数,所以这个名字将永远是基于哪个动作绑定的属性名称。
例:

  1. class Ticker {
  2. @observable tick = 0
  3. @action.bound
  4. increment() {
  5. this.tick++ // 'this' will always be correct
  6. }
  7. }
  8. const ticker = new Ticker()
  9. setInterval(ticker.increment, 1000)

注意:不要使用带箭头功能的_action.bound ; 箭头功能已经绑定,无法反弹。_

runInAction(name?, thunk)

runInAction是一个简单的实用程序,它采用代码块并在(匿名)操作中执行。这对于动态创建和执行操作很有用,例如在异步过程中。runInAction(f)是糖action(f)()