Javascript Reactjs中未更新状态
我正在尝试从initialShapes状态更新finalShapes状态,但我遇到一个问题,finalShapes没有得到更新。我正在对初始形状状态进行一些更改,然后将处理后的数据存储在最终形状中。 请告诉我我做错了什么Javascript Reactjs中未更新状态,javascript,reactjs,Javascript,Reactjs,我正在尝试从initialShapes状态更新finalShapes状态,但我遇到一个问题,finalShapes没有得到更新。我正在对初始形状状态进行一些更改,然后将处理后的数据存储在最终形状中。 请告诉我我做错了什么 this.state.initialShapes.map (sh => { var data = {}; data.name = sh.name; data.x1 = sh.x; data.y1 = sh.y; data.x2 = sh.x
this.state.initialShapes.map (sh => {
var data = {};
data.name = sh.name;
data.x1 = sh.x;
data.y1 = sh.y;
data.x2 = sh.x + sh.width;
data.y2 = sh.y + sh.height;
this.setState ({finalShapes : [...this.state.finalShapes, data]});
});
您不会更新循环中的状态,因为它不会立即更新状态。这意味着循环的下一次迭代将不会看到更新的
状态
:
setState()
并不总是立即更新组件。它可以批处理更新或将更新推迟到以后。这使得调用setState()
后立即读取This.state
成为一个潜在的陷阱
您可以复制您的InistialShape
,并更新状态一次
var updatedShapes = this.state.initialShapes.map (sh => {
var data = {};
data.name = sh.name;
data.x1 = sh.x;
data.y1 = sh.y;
data.x2 = sh.x + sh.width;
data.y2 = sh.y + sh.height;
return data;
});
this.setState ({finalShapes : updatedShapes });
这不是您处理
setState
的方式您是否试图在每次迭代中更新状态?您不应该在迭代中设置状态,而是创建原始状态的对象副本,对该副本执行操作以创建新状态,最后使用一个setState将最终状态设置为编辑的copyyes,我到底做错了什么?如果您想访问以前的状态,我建议使用setState的回调形式,如this.setState(prevState=>{…})
。好的,但为什么我们不能这样做呢?