【发布时间】:2017-09-04 10:48:16
【问题描述】:
我知道我不应该直接在 React 中改变状态,但是当我使用函数时的情况如何:
onSocialClick = e => {
const id = e.target.value;
this.setState((prevState, props) => {
prevState[id] = !(prevState[id]);
return prevState;
});
};
修改传递的对象会不会出错?
编辑:
事实证明,我们大多数人都错了。立即回复docs state it clearly:
state 是对应用更改时的组件状态的引用。它不应该直接突变。相反,应该通过基于 state 和 props 的输入构建一个新对象来表示更改
感谢@Tomáš Hübelbauer 在评论中指出这一点。
【问题讨论】:
-
这不是错误:) 不直接修改状态意味着你应该使用
setState,而不是this.state =...。如果你这样做 - 一切都很好,无论你使用什么作为传入参数。 -
@Tomasz 我问了一个后续问题,因为我对您的代码 sn-p 有疑问。你可能会觉得这很有趣:stackoverflow.com/q/47339643/2715716
-
@TomášHübelbauer 谢谢!我已经进行了编辑。
-
我试图在文档中找到确切的声明,但看起来他们重命名了变量 -
prevState现在只是state