【发布时间】:2017-11-18 02:39:50
【问题描述】:
我正在研究 React JS 制作一个简单的待办事项列表,我的部分代码如下:
changeStatus(e, index) {
this.state.tasks[index].status = e.target.value;
this.setState((prevState) => ({
tasks: prevState.tasks
}));
}
正如 React 文档所说,我们不应该手动更改 state,而应该调用 setState,因此,我在控制台上收到警告说,即使在手动更改后调用 setState。
我这样做是因为,对我来说,这样做比分离 task、在我的数组上执行 splice 并使用新值调用 setState 更实际。
我的方法有问题吗?您如何建议以高效且非重复的方式更新状态?
【问题讨论】:
-
The React docs outline why this is a bad idea: "永远不要直接修改 this.state,因为之后调用 setState() 可能会替换你所做的修改"。换句话说,如果您直接改变状态,则无法保证您的更改实际上会持续存在。
-
因为我来自 Vue,所以这不是我关心的问题。谢谢!
-
是的,Vue 通常在设计时似乎考虑到了变异(这就是为什么很多人喜欢它而不是 React,即使这不是我个人的偏好)。你必须在 React 中使用
setState的原因是它允许优化 - 例如如果您连续两次快速调用setState,它们可能会合并为一次执行的批量更新。再次引用文档:“将setState视为更新组件的请求,而不是立即命令。” -
太棒了。我首先采用了 Vue,因为它非常适合我正在开发的一些应用程序。我现在选择学习 React 以将其与 React Native 应用程序一起使用并且由于市场份额,尽管我仍然更喜欢 Vue。
标签: javascript reactjs