React Native 改变状态导致 mobx-state-tree 异常

React Native change state leads to mobx-state-tree exception

我在更改我所在州的值时遇到问题。我有

state = {
    ......,
    tags: []
}

这些标签的填充方式如下:

tags: this.props.userStore.details.tags

标签是字典列表:

tags = [{'name': tag1, 'userSelect': true}, {'name': tag2, 'userSelect': false}]

我将它们全部显示在复选框中:

renderTagCheckbox() {
    return this.state.tags.map((item, key) => {
      return(
        <TouchableOpacity key={key} style={{flexDirection: "row", marginTop: 5, justifyContent: "center"}}>
          <CheckBox
            isChecked={item.userSelect}
            onClick={() => this.changeCheckboxValue(item)}
          />
          <Text>{item.name}</Text>
        </TouchableOpacity>
      )
    })
  }

在我的 changCheckboxValue() 我有:

  changeCheckboxValue(item) {
    //this.refersSubscriptions.forEach(s => s.remove())
    let currentTags = this.state.tags
    currentTags.forEach(tag => {
      if (tag===item) {
        tag.userSelect = !tag.userSelect
      }
    })
  }

这样我想我可以用 currentTags 设置状态,其中值将被更改,但我得到一个错误:

[mobx-state-tree]Cannot modify 'tags@/userStore/details/tags/0', the object is protected and can only be modified by using an action.

有人可以告诉我我做错了什么吗?

来自 mobx-state-tree 文档:

By default, nodes can only be modified by one of their actions, or by actions higher up in the tree.

您将 tags 置于全局状态,这是一个不可变对象。因此,请避免通过组件中的内联代码更改全局状态。

您可以定义 propper actions 并为这些更改分派它们。

有关 mobx-state-tree 中操作的更多信息,请查看 documentation