在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 };
});
也不起作用。
答案 0 :(得分:2)
setState
不同步!如果要确保在记录状态之前对其进行更新,只需使用第二个参数,该参数将在状态更新完成时提供回调。
this.setState({item: newItem},() => console.log(this.state.item))