无法访问 React 中的嵌套 JSON 对象

2024-02-25

我有一个简单的 React 组件,并尝试在中显示嵌套的 JSON 对象render.

// React Component

class NodeDetail extends React.Component {
  constructor(props) {
    super(props);
    const node = {};

    this.state = {
      node
    }
  }

  componentDidMount() {
    Node.getNode(this.props.node_id).then((result) => {
      console.log(result.data);
      this.setState(() => ({node: result.data}));
    }).catch(function(error) {
      // TODO: handle error
    });
  }

  render() {
    return (
      <div>
        {this.state.node.node_status.name}
      </div>
    );
  }
};

export default NodeDetail;

这是 JSON(存储在result.data) 从 Rails API 返回(为简洁起见,删除了一些字段):

{  
   "id":1234,
   "name":"some-node",
   "created_at":"2018-05-18T15:23:24.012Z",
   "hostname":"some-host",
   "ip":"10.XXX.XXX.XXX",
   "mac":"24:6e:96:XX:11:XX",
   "node_status":{  
      "id":2,
      "name":"Parked"
   }
}

当我访问 React 中的根级别属性时this.state.node.mac,它返回24:6e:96:XX:11:XX.

当我尝试访问name属性在node_status using this.state.node.node_status.name,我收到以下错误:

Uncaught TypeError: Cannot read property 'name' of undefined

我也尝试过this.state.node['node_status'].name,和同样的错误。

为什么我无法在 JSON 中访问该对象,而它显然就在那里?


我敢打赌这是因为您对 Rails API 的调用是异步的——所以您的NodeDetail组件尝试在 API 返回数据/状态之前渲染result.data...尝试设置一个不存在的条件node_status正如其他一些答案所建议的那样。

因此当前(错误)的数据流将是:

  1. constructor. state被设定为{node: {}}
  2. componentDidMount。调用 API。
  3. render。抛出异常,因为this.state.node.node_status is undefined。组件损坏并且不会再次渲染...
  4. API返回。state被设定为result.data. result.data被记录到您的控制台。

你可以做的是这样的:

render() {
    if (!this.state.node.node_status) {
      return null;
    }

    return (
      <div>
        {this.state.node.node_status.name}
      </div>
    );
  }

或任何其他建议来解释undefined的价值this.state.node.node_status.

一般来说,您需要确保您的render即使使用默认值,方法也能工作state中设置的值constructor.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法访问 React 中的嵌套 JSON 对象 的相关文章

  • 如何判断网站是否使用 next.js?

    很容易判断一个网站是否使用 ReactJS 通过使用反应开发者工具 https chrome google com webstore detail react developer tools fmkadmapgofadopljbjfkapd
  • Golang 结构的 XML 和 JSON 标签?

    我有一个可以根据 HTTP 请求标头输出为 JSON 或 XML 的应用程序 我可以通过将正确的标签添加到我正在使用的结构中来实现正确的输出 但我不知道如何为 JSON 和 XML 指定标签 例如 序列化以纠正 XML type Foo s
  • 使用 babel env 预设时,展开运算符出现语法错误

    我正在努力 现代化 meern io 入门样板 https github com Hashnode mern starter通过替换巴别塔es2015 and stage 0预设为env 然而 似乎env预设无法识别以下片段client m
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 如何使用 Nextjs/React 将 JSON 对象导出到 Excel?

    我有一个检索 json 对象的端点 如下所示 data id 1 temaIndicador Indian codigo 001 observaciones Interactions Specialist tertiary Regional
  • 替换img路径jquery

    我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
  • Permissions-Policy 标头错误:无法识别的功能:“interest-cohort”

    我才刚刚开始反应 我的页面在本地主机上运行良好 现在我正尝试在 github 上托管我的页面 我使用了 npm run deploy 并托管 这是我的 package json 现在 当我尝试访问我的页面时 我遇到了错误 第一个警告最让我担
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 等待异步 grunt 任务完成

    我收到了 grunt 设置 其中一个新任务应该执行 grunt task run 已经存在的任务 要执行的任务是异步的 新任务应该等待异步任务完成 执行此操作的首选方法是什么 grunt 已经涵盖了这一点 你应该将你的任务声明为异步任务 并
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • React Hooks 常量组件与功能组件

    我理解函数组件和类组件之间的区别 但是 const 组件和函数组件之间有什么区别 e g const Home gt return div Home div To function Home return div Home div 两者都可
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • 测试 jQueryUI 是否已加载

    我正在尝试调试网站 并且我认为 jQueryUI 可能未正确加载 如何测试 jQueryUI 是否已加载 if jQuery ui UI loaded OR if typeof jQuery ui undefined UI loaded 应
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效

随机推荐

  • 使用 JavaScript 创建倾斜的 Div 和对象

    是否可以使用 JavaScript 创建这样的 倾斜菜单 请参见下文 前提是我希望它们是 相对的 以便根据屏幕尺寸适当调整大小 您可以使用 CSS 转换来完成此操作 并使用其他一些技巧 div transform rotate 45deg
  • 用空格包裹运算符的 Emacs 模式/函数

    我记得 Emacs 有一种模式 或者是一个选项 我记不清了 它通过在运算符后面放置空格来美化代码 例如 包裹 有空格 还有其他一些我不记得的很酷的东西 我认为这几乎是特定于语言的问题 但我通常在逗号后加空格 然后换行 有空格 关于这个模式有
  • 使用javascript读取Json文件数据?

    function uploadJsonFunction var jsonURL C Users My Documents new WebContent JsonFiles TreeJson countries json countries
  • 列组的 SSRS 矩阵分页符

    我目前正在使用 SSRS 2012 但显然遇到了障碍 是否可以在列组变量的每个新实例上设置分页符 我在下面给出了一个基本的例子 我选择了跨组分页符选项 下图 我注意到有一个类似的帖子 没有有效的答案 另一个列组 分页问题 https sta
  • Intellij:转到自动装配 bean 定义

    我正在寻找通过 java 代码中的 Autowired 依赖项找到 bean 定义的快速方法 假设我有 Autowired private JdbcTemplate template 我想让IDEA告诉我哪个xml文件是定义的templat
  • .NET Core 6 SQL Server 连接(无需实体框架)

    我是 NET Core 的新手 我已经在中定义了连接字符串appsettings json像这样 ConnectionStrings TestBD Server localhost Database Test Trusted Connect
  • .Net Maui - 尝试构建时操作超时

    我在构建 运行默认的新毛伊岛应用程序时遇到问题 我创建一个新的 NET Maui App Preview 并且不对自动生成的代码库进行任何更改 但是当我尝试构建或运行应用程序时 我收到以下超时错误 Severity Code Descrip
  • ggplot R 次要 y 轴的更改限制

    我有一个与此线程非常相似的问题在ggplot2中组合条形图和折线图 双轴 https stackoverflow com questions 41764312 combining bar and line chart double axis
  • 如何在 yii2 php 中添加 spinner/loader

    我想在我的其中一个表单中添加一个旋转器 加载器 场景很简单 当我按下create按钮 然后它将显示一个旋转器 加载器 点击创建按钮后 将调用 Web 服务 以便旋转器 加载器将从调用开始到调用结束显示 下面是我的控制器 m MetersIn
  • flutter for web:文本在底部被切断

    随着网络抖动 当我显示文本时 我的文本被剪切在底部 我尝试添加填充 但它不起作用 这个问题这个产品无处不在 甚至在文本字段上 new Container width menuRightWidthDesktop height getSize
  • 使用 Python xml.sax 解析 XML:如何“跟踪”您在树中的位置?

    我需要定期从我们的管理软件导出 XML 文件 这是我第一次在 Python 中使用 XML 解析 XML 与xml sax并不是很困难 但是 跟踪 您在 XML 树中的位置的最佳方法是什么 例如 我有一份我们的客户名单 我想通过 提取电话
  • EC2 Auto Scaling 组的实例刷新低于正常阈值

    我有一个 ASG 其所需 最小 最大数量为 1 1 5 个实例 我希望 ASG 仅用于滚动部署和区域故障转移 当我使用 MinHealthyPercentage 100 InstanceWarmup 180 启动实例刷新时 该过程从取消注册
  • 是否存在或将会存在 target_clones 属性的“全局”版本?

    我最近玩过target clones该属性从 gcc 6 1 及更高版本可用 这非常漂亮 但是就目前而言 它需要一种有点笨拙的方法 每个想要多版本化的函数都必须手动声明一个属性 这不是最佳的 因为 它将编译器特定的内容放入代码中 它要求开发
  • PyQt 连接到 KeyPressEvent

    某些小部件将允许我执行以下操作 self widget clicked connect on click 但正在做 self widget keyPressEvent connect on key 将失败 表明该对象没有属性 connect
  • C++ 数组的 matlab 风格索引

    我想知道以下 matlab 习语最有效的 C 实现是什么 假设我在matlab中有3个向量 x y和idx x 13 2 5 5 22 107 y 3 100 200 idx 1 2 5 我想用 y 的内容替换 x 的位置 1 2 和 5
  • Python 将数字列表与其他数字列表相加

    在Python中 是否有一种简单的方法将列表的单独数字添加到其他列表的单独数字 在我的代码中 我需要以与此类似的方式添加大约 10 个长列表 listOne 1 5 3 2 7 listTwo 6 2 4 8 5 listThree 3 2
  • Azure Web 作业已停止/中止

    我有一个持续运行的天蓝色网络作业 但日志表明周末它的状态更改为 已中止 然后 已停止 虽然我周末没有使用该网站 但我不确定为什么会发生这种情况 因为队列中仍然有很多消息需要处理 什么会导致连续的网络作业停止或中止 它有超时时间吗 多个错误的
  • 如何开发/实施适用于 iPad 的远程桌面应用程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • os.path.getsize 报告的文件大小末尾带有 L,为什么?

    import os sys def crawlLocalDirectories directoryToCrawl crawledDirectory os path join path subname for path dirnames fi
  • 无法访问 React 中的嵌套 JSON 对象

    我有一个简单的 React 组件 并尝试在中显示嵌套的 JSON 对象render React Component class NodeDetail extends React Component constructor props sup