关于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 是异步的,你可以改一下尝试一下哈

0
0

React高级实战 打造大众点评Web App

已经对React Router4与Webpack2进行了项目升级

1711 学习 · 707 问题

查看课程