ReactJS componentDidUpdate()prevState等于currentState

时间:2019-07-01 18:41:42

标签: reactjs

在S.O上有一个问题。已经有相同的标题,但我陷入了另一部分。

我通过以下方式设置自己的状态:

  var index = this.state.rectangles.indexOf(eachRect);
  const newRects = [...this.state.rectangles];
  newRects[index].x = event.target.x();
  newRects[index].y = event.target.y();
  this.setState({ rectangles: newRects });

据我所知,做const newRects = [...this.state.rectangles]是在创建一个不同的对象,而不是指向相同的引用(这是另一个S.O问题的错误,因此我的prevState和this.state之间是有区别的。 但是,在componentDidUpdate()中记录prevState和this.state仍然返回true。

我还尝试通过以下方式设置状态:

  this.setState(prevState => {
                          console.log(prevState.rectangles[index]);
                          let oldRects = [...prevState.rectangles];
                          oldRects[index].x = event.target.x();
                          oldRects[index].y = event.target.y();
                          console.log("new rects: ", oldRects);
                          return { rectangles: oldRects };
                        });

也不起作用。

1 个答案:

答案 0 :(得分:2)

setState不同步!如果要确保在记录状态之前对其进行更新,只需使用第二个参数,该参数将在状态更新完成时提供回调。

this.setState({item: newItem},() => console.log(this.state.item))