当前位置: 首页 > 知识库问答 >
问题:

访问另一个对象中的对象返回无法读取未定义的属性

益楷
2023-03-14

我有一个微不足道的问题,但由于某种原因我无法解决。

我有一个对象,它是来自API的返回请求:

state = { 
        data: []
    }

    componentDidMount() {
        fetch(`https://api.openweathermap.org/data/2.5/weather?q=Toronto,CA&appid=${appkey}`)
        .then(data => data.json())
        // .then((data) => {
        //  console.log(data);
        // })
        .then(data => this.setState({data}))

    }

和:

render() {
const weather = this.state.data
console.log(weather.main);

第一部分是在react组件之前首先出现的内容。我能够获取一个对象,然后创建一个返回另一个对象的变量(const),在本例中:

{feels_like: 271.85
temp_min: 272.15
temp_max: 276.48
pressure: 1027
humidity: 97}

对于我的无知,奇怪的部分是,如果我试图以这种方式访问第一个值(feels_like):

weather.main.feels_like

它将抛出一个错误,即无法读取未定义的属性feels_like。

现在,我试图循环遍历对象,但它不起作用,我试图用不同的语法访问属性,但它仍然抛出了一个错误。

我错过什么了吗?

目标是创建如下组件:

console.log(this.state.data);
 const weather = this.state.data;
 return (

  <div>
  <div key={weather.id}>
  <h3>Library Product of the Week!</h3>
  <h4>{weather.name}</h4>
  <h4>{weather.main.temp}</h4>
  <h4>{weather.main.feels_like}</h4>
  <h4>{weather.main.temp_min}</h4>
  <h4>{weather.main.temp_max}</h4>
  <h4>{weather.main.pressure}</h4>
  <h4>{weather.main.humidity}</h4>
  </div>
  </div>
  )
}

这就是全部代码

import React from 'react'
 import { render } from 'react-dom'

 const appkey = 'xx';

 class Message extends React.Component {

    state = { 
        data: []
    }

    componentDidMount() {
        fetch(`https://api.openweathermap.org/data/2.5/weather?q=Toronto,CA&appid=${appkey}`)
        .then(data => data.json())
        // .then((data) => {
            //  console.log(data);
            // })
            .then(data => this.setState({data}))

        }

        componentDidUpdate() {
            console.log("The component just updated")
        }

        render() {
            console.log(this.state.data);
            const weather = this.state.data;
            return (

                <div>
                <div key={weather.id}>
                <h3>Library Product of the Week!</h3>
                <h4>{weather.name}</h4>
                <h4>{weather.main.temp}</h4>
                <h4>{weather.main.feels_like}</h4>
                <h4>{weather.main.temp_min}</h4>
                <h4>{weather.main.temp_max}</h4>
                <h4>{weather.main.pressure}</h4>
                <h4>{weather.main.humidity}</h4>
                </div>
                </div>
                )
        }
    }

    render(
        <Message />, 
        document.getElementById('root')
        )

共有1个答案

松秦斩
2023-03-14

从您提供的代码来看,似乎在数据首次保存到状态之前,您就已经在访问数据了。因此,您试图从空数组中获取feels_like值,这是您的初始状态。

为了修复它,你应该检查你的数据是否存在,然后在渲染方法中使用它

编辑:

由于某种原因,API密钥对我不起作用,文档提到它可能需要几个小时才能起作用,所以我无法为您测试。但是代码沙盒在渲染数据之前会检查数据是否存在。如果数据未初始化,它将呈现一些文本。希望这能有所帮助!

 类似资料:
  • 我之前问过这个问题,它与这个问题相关(如何从异步调用返回响应?),但它并没有解决我的问题 我是node.js的新手,我遇到了一些我无法处理的错误,或者找不到任何我理解的帮助。我使用express generator初始化应用程序。我试图通过一个api调用将我得到的对象发送到前端。我编写了一个类“StockClass.js”,其中包含一个函数makeApiCall(),该函数进行调用并返回对象。但当

  • 问题内容: 首先看下面的JavaScript对象 我想将值设置为与相同,因此我将对象值放在前面,但它对我不起作用,我也使用过,但仍然失败。我的问题是如何访问对象内对象的属性。 一些用户沉迷于问“您想做什么或发送脚本等”,对于那些人来说,答案很简单:“我想访问对象内的对象属性”,上面提到了脚本。 任何帮助将不胜感激 :) 问题答案: 使用 对象文字 语法时,不能在初始化期间引用对象。创建对象后,需要

  • 我想要一个方法,它返回一个Object,该Object被赋予一个类,该类取决于传递的String的值 然后,我希望能够打印出一个属性(例如对象属性),我知道它将由类名可以表示的所有可能的类持有。可能的类在单独的文件中定义。但是编译器给错误找不到符号对象属性。我如何访问这个对象的属性? 抱歉,问题措辞不当 感谢您的任何帮助

  • 我正在做codecadiy的javascript教程,遇到的问题如下: console.log(friends.prop)将打印出未定义的,但如果我将其更改为 朋友[prop],它将打印账单和史蒂夫对象信息。 我看到w3c教程说有两种访问方法是正确的,我无法理解 到底是什么问题? 谢谢提前。

  • 我实现了一个函数,希望返回保存在某个url下的对象。在下面的代码中,第一个“console.log(result);”从firebase位置返回正确的对象。第二个返回未定义。有人能解释一下为什么以及如何修复它吗?

  • 问题内容: 检查JavaScript中的对象属性是否为最佳方法是什么? 问题答案: 检查属性值是否为特殊值的通常方法是: 要检查对象是否实际上没有这样的属性,并因此在尝试访问它时默认情况下将返回: 检查与标识符关联的值是否为特殊值, 或者 尚未声明该标识符。注意:此方法是引用 未声明的标识符(注意:与的值不同)的唯一方法,且不会出现早期错误: 在ECMAScript 5之前的JavaScript版