首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React对象数据未定义

React对象数据未定义
EN

Stack Overflow用户
提问于 2018-09-08 23:10:24
回答 4查看 5.6K关注 0票数 3

我把一个对象作为道具传递给一个组件。

代码语言:javascript
复制
<SomeComponent myData={props.myData}>...</SomeComponent>

SomeComponent中,当我使用console.log this.props.myData时,它并不是未定义的,它包含key/val对,正如所期望的那样。

代码语言:javascript
复制
constructor(props) {
  super(props);
  console.log(this.props.myData);
  …
}

但是,当我试图访问该对象的任何一个属性时,它们都是undefined

代码语言:javascript
复制
constructor(props) {
  super(props);
  console.log(this.props.myData.title); // undefined
  …
}

更新

下面是输出值,但我不清楚为什么,因为没有setTimeout对象已经可用。

代码语言:javascript
复制
constructor(props) {
  super(props);
  setTimeout(() => {
    console.log(this.props.fightData.title); // "Work plain near killed us both"
  });
  …
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-08 23:21:08

你在这里看到的很可能是Chrome开发工具的工作方式。当您对一个对象进行console.log更新/更改时,开发人员工具中的输出也将自动更新以显示新的对象状态。我不太清楚为什么会这样。

所以,当您执行第一个示例时,myData实际上是一个空对象(由于应用程序的其他部分),但它稍后会被填充,这会导致您的组件更新和更新Chrome工具。

试着像这样运行控制台日志:

代码语言:javascript
复制
console.log(JSON.stringify(this.props.myData));

看看它输出了什么。这将创建并打印一个字符串,因此当对象更改时,它将不会在developer工具中更新。

当控制台日志this.props.myData.someVar在空对象上时,它会打印未定义的控制台,控制台没有附加到任何现有对象。因此,即使在组件上更新对象时,也不会像第一个示例那样在控制台中进行更新。

这很可能仅适用于基于类的组件,因为每次重新呈现时都会重新创建基于功能的组件,但基于类的组件只是更新其支持对象。

票数 4
EN

Stack Overflow用户

发布于 2018-09-16 18:38:34

我刚刚遇到了和你完全一样的问题。

使用您的示例,我通过访问this.props.myDatap[title]而不是this.props.myData.title解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2018-09-09 00:35:57

您可以尝试以下从对象读取键和值的方法

从对象中获取密钥

代码语言:javascript
复制
 Object.keys(this.props.myData).forEach((key) => { console.log(key + ': ' + this.props.myData[key]); });

从对象中获取值

代码语言:javascript
复制
 Object.values(this.props.myData).forEach((value) => { console.log(value + ': ' + this.props.myData[value]); });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52240093

复制
相关文章

相似问题

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