首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在reactjs中首次运行时在控制台上获取空对象

在reactjs中首次运行时在控制台上获取空对象
EN

Stack Overflow用户
提问于 2019-06-24 00:15:03
回答 3查看 166关注 0票数 2

我有一个按钮,单击该按钮后,我将调用箭头函数contentLoad。我有两个对象。一个是'obj‘,另一个是'content’,它仅仅是'obj‘的副本。

this.setState({content: obj})

当我在控制台上打印这两个文件时。另一个,也就是复制的第一次点击为null。然而,在第一次点击之后,一切看起来都很好。

整个项目都是here

js代码是this

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-24 00:23:50

一个鲜为人知的事实是,this.setState是React中的一个异步函数。它接受第二个参数,该参数是在实际设置状态后要执行的回调。

代码语言:javascript
复制
this.setState(new_state, optional_callback_function)

因此,当您在记录content时看到null被打印时,这是因为在调用console.log之前没有设置状态,而您只是看到了初始值null

为了纠正这个问题并每次都能看到正确的值,你可以像这样重构你的代码:

代码语言:javascript
复制
this.setState({content: obj}, () => {
   console.log(this.state.content);
})
票数 3
EN

Stack Overflow用户

发布于 2019-06-24 00:23:35

根据手册here

“对setState的调用是异步的-不要依赖this.state在调用setState后立即反映新值。如果需要根据当前状态计算值,请传递更新函数而不是对象(详细信息见下文)。”

票数 3
EN

Stack Overflow用户

发布于 2019-06-24 00:24:17

setState是异步的,所以它可能没有在紧随其后的console.log之前完成。

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

代码语言:javascript
复制
this.setState({content: obj}, () => console.log(this.state.content));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56725708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档