Javascript Reactjs中未更新状态

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

我正在尝试从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 + 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=>{…})
。好的,但为什么我们不能这样做呢?