Mobx 计算不起作用

Mobx computed doesn't work

我正在使用 mobx 4.2.0 当我尝试使用计算 属性 时,我遇到了一些问题 代码如下:

class ODOM {
  constructor(props) {
    console.log('how many times')
  }
  @observable speed = 0
  @action change(obj) {
    console.log(obj)
    Object.keys(obj).forEach(item => {
      this[item] = obj[item]
    })
  }
  @computed get velocity() {
    console.log('entry')
    return this.speed*60*60/1000
  }
}
const model = new ODOM()
let total = 0
setInterval(() => {
  model.change({
    speed: ++total
  })
}, 3000)
export default model

控制台'entry'仅运行一次 这些代码有什么问题

我发现 problem.Cause 观察者没有正确使用。

Computed re-calculation 仅在直接在 render 函数中使用此 属性 的组件中由 mobx 触发,并且这些 react 组件必须使用 @observer 属性进行注释。

否则使用非 computed/normal 属性或自己缓存值。

必须观察您的计算,以便在它所依赖的可观察量发生变化时重新计算它。

This example uses an autorun 显示行为:

class ODOM {
  @observable speed = 0

  @action change(obj) {
    Object.keys(obj).forEach(item => {
      this[item] = obj[item]
    })
  }

  @computed get velocity() {
    console.log('entry')
    return this.speed*60*60/1000
  }
}

const model = new ODOM()
let total = 0
setInterval(() => {
  model.change({
    speed: ++total
  })
}, 1000);

autorun(() => {
  console.log(model.velocity);
});

如果@withRouter 在@observer 下将使@observer,@computed 失败 像这样(错误):

@observer 
// @ts-ignore
@withRouter

你需要这样写(正确):

// @ts-ignore 
@withRouter
@observer