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