This question already has answers here:
Why calling react setState method doesn't mutate the state immediately?
                                
                                    (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()

09-25 16:19
查看更多