关于setState使用方法的问题
来源:3-2 todo-list-demo
supersylph
2017-08-05
以下是react官方文档的说法:
React 为了优化性能,有可能会将多个 setState() 调用合并为一次更新。
因为 this.props 和 this.state 可能是异步更新的,你不能依赖他们的值计算下一个state(状态)。
例如, 以下代码可能导致 counter(计数器)更新失败:
// 错误 this.setState( counter: this.state.counter + this.props.increment, });要解决这个问题,应该使用第 2 种 setState() 的格式,它接收一个函数,而不是一个对象。该函数接收前一个状态值作为第 1 个参数, 并将更新后的值作为第 21个参数:
要弥补这个问题,使用另一种 setState() 的形式,它接受一个函数而不是一个对象。这个函数将接收前一个状态作为第一个参数,应用更新时的 props 作为第二个参数:
// 正确 this.setState((prevState, props) => ({ counter: prevState.counter + props.increment }));
所以在这个todos demo中, 对submitFn和deleteFn函数中的setState使用方法是否应该改用上述的第二种形式? 比如
// 原demo中的代码 this.setState({ todos: this.state.todos.concat({ id: id, text: value }) })
改成
this.setState((prevState, props) => ({ todos: prevState.todos.concat({ id: id, text: value }) }))
写回答
1回答
-
双越
2017-08-05
setState 是异步的,你可以改一下尝试一下哈
00
相似问题