我正在尝试从initialShapes状态更新finalShapes状态,并且遇到一个问题,即finalShapes无法更新。我正在initalShapes状态中进行一些更改,然后将操纵的数据存储在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]});
});
答案 0 :(得分:1)
您不会循环更新状态,因为它不会立即更新状态。这意味着循环的下一次迭代将看不到更新的 private View.OnClickListener clicked = new View.OnClickListener(){
@Override
public void onClick(View view) {
//Insert Code here
}
};
。
btn = new Button(this); btn.setOnClickListener(clicked);
并不总是立即更新组件。它可能会批量更新或将更新推迟到以后。这使得在调用state
之后立即阅读setState()
是一个潜在的陷阱。
您可以复制this.state
并更新一次状态
setState()