MobX'this'在setter操作中未定义

时间:2019-12-08 22:45:45

标签: javascript reactjs create-react-app mobx mobx-react

我正在使用带有JS和mobx decorate方法的最新create-react-app设置。

import { observable, action, decorate } from 'mobx'

class UserStore {
  users = []
  currentUser = {}

  setUsers(value) {
    this.users = value
  }
}

decorate(UserStore, {
  users: observable,
  currentUser: observable,
  setUsers: action
})

export default UserStore

我可以使用存储并读取空的userscurrentUser观察值,但是当我尝试使用setUsers操作时,会收到以下错误:

TypeError: Cannot set property 'users' of undefined

看起来像this尚未定义,但这是大多数MobX教程显示的常用方法,不应引发错误...

1 个答案:

答案 0 :(得分:0)

在MobX与原始JavaScript结合使用时,不同的上下文可能会造成一些混乱... MobX引入了bound actions,以简化此操作。

使用action.bound进行正确的修饰是:

setUsers: action.bound

或者我们可以使用lambda函数来确保上下文正确:

setUsers = value => {
  this.users = value
}

任何一项更改都将确保setter函数的上下文正确,并且可以使用类this。请查看answers to a similar question,以获得更详细的说明。