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。
我在更改我所在州的值时遇到问题。我有
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。