Javascript 在控制台上为reactjs中的第一次运行获取null对象

Javascript 在控制台上为reactjs中的第一次运行获取null对象,javascript,reactjs,Javascript,Reactjs,我有一个按钮,我在点击该按钮时调用了一个箭头函数contentLoad。我有两件东西。一个是“obj”,另一个是“content”,它只是“obj”的复制品 this.setState({content:obj}) 当我在控制台上打印它们时。另一个,即复制的,在第一次单击时为空。但是,在第一次单击之后,一切看起来都很好 整个项目是 根据手册,js代码为: “对setState的调用是异步的-在调用setState后,不要依靠this.state立即反映新值。如果需要根据当前状态计算值,请传递更新

我有一个按钮,我在点击该按钮时调用了一个箭头函数contentLoad。我有两件东西。一个是“obj”,另一个是“content”,它只是“obj”的复制品

this.setState({content:obj})

当我在控制台上打印它们时。另一个,即复制的,在第一次单击时为空。但是,在第一次单击之后,一切看起来都很好

整个项目是

根据手册,js代码为


“对setState的调用是异步的-在调用setState后,不要依靠this.state立即反映新值。如果需要根据当前状态计算值,请传递更新程序函数而不是对象(请参阅下文了解详细信息)。”一个鲜为人知的事实是,
this.setState
是React中的一个异步函数。 它接受第二个参数,即在实际设置状态后执行的回调

this.setState(new_state, optional_callback_function)
因此,当您在记录
内容时看到打印
null
时,这是因为在调用
控制台.log
之前没有设置状态,您只看到初始值
null

要纠正这一点并每次都看到正确的值,您可以像这样重构代码:

this.setState({content: obj}, () => {
   console.log(this.state.content);
})

setState是异步的,因此它可能没有在紧接其后的console.log之前完成

setState允许传递回调函数,该函数将在修改状态后调用。请改为使用回调来尝试此操作:

this.setState({content: obj}, () => console.log(this.state.content));

在传递更新程序函数时,我在控制台收到一个警告。警告:不要直接变异状态,请在react JS中使用setState()react/无直接变异状态