This question already has answers here:
Why calling react setState method doesn't mutate the state immediately?
(6个答案)
2年前关闭。
好的,所以当我在应用程序中单击表格单元时,就会调用此函数。
重点是获取用户UserId并设置状态。稍后将此UserId传递给子组件,并用于获取特定信息。问题是我在第一个console.log中获得了正确的数据,但是当我随后将其记录下来时。
指出由于某种原因,userId仍为null。任何人都有类似的问题吗?
另外,您的console.log不会读取状态的立即更改,因为
如果您真的想阅读它,则可以将回调传递给
(6个答案)
2年前关闭。
onSelectedRow(user, clickEvent){
const state = this.state;
this.state['userId'] = clickEvent.target.getAttribute(user['mta:UserId']);
this.setState(state);
console.log(user['mta:UserId']);
console.log(this.state);
}
好的,所以当我在应用程序中单击表格单元时,就会调用此函数。
重点是获取用户UserId并设置状态。稍后将此UserId传递给子组件,并用于获取特定信息。问题是我在第一个console.log中获得了正确的数据,但是当我随后将其记录下来时。
指出由于某种原因,userId仍为null。任何人都有类似的问题吗?
最佳答案
这很可能是因为您没有更新const state
,而是试图改变状态本身。
另外,您不必复制状态。您可以像这样仅更新要更新的字段:
onSelectedRow(user, clickEvent) {
this.setState({
userId: clickEvent.target.getAttribute(user['mta:UserId'])
}, () => { console.log(this.state.userId) });
console.log(user['mta:UserId']);
}
另外,您的console.log不会读取状态的立即更改,因为
setState
是异步操作。如果您真的想阅读它,则可以将回调传递给
setState
,在状态更新后立即将其填充,或使用React的生命周期方法componentDidUpdate()
。