javascript - 无法读取未定义的属性 'Materials'。使用嵌套对象响应 useState

标签 javascript json reactjs api react-hooks

我正在尝试将此 API 调用的结果存储到我的状态中。当我尝试在 JSX 中调用任何对象的“数据”状态时,例如:data["Rank A: Real-Time Performance"].Materials,我收到 undefined error 。如果状态变量不是嵌套对象,它就可以正常工作。有人可以指出我正确的方向吗?我是做错了什么,还是这是不好的做法?谢谢

这是 API 响应的示例

{
"Meta Data": {
    "Information": "US Sector Performance (realtime & historical)",
    "Last Refreshed": "04:20 PM ET 09/13/2019"
},
"Rank A: Real-Time Performance": {
    "Materials": "1.14%",
    "Financials": "0.84%",
    "Energy": "0.80%",
    "Industrials": "0.52%",
    "Communication Services": "-0.05%",
    "Health Care": "-0.07%",
    "Consumer Discretionary": "-0.19%",
    "Utilities": "-0.57%",
    "Information Technology": "-0.67%",
    "Consumer Staples": "-0.75%",
    "Real Estate": "-1.27%"
},

这是 React 代码:

import {useState, useEffect} from 'react';


const SectorData = () => {
    let [data, setData] = useState({});

    async function fetchData() {
        try {
            const url = "https://www.alphavantage.co/query?function=SECTOR&apikey=VZI9OTBHE0X9Y1JD";
            const response = await fetch(url);
            const json = await response.json();
            // This console log prints perfectly
            console.log("json = " + json["Rank A: Real-Time Performance"].Materials)
            setData(json)         
        } catch (e) {
            console.error(e);
        }
    };
    useEffect(() => {  
        fetchData();
      }, [])

    return(
        <>
            {data["Rank A: Real-Time Performance"].Materials}
        </>
        
    )
}

export default SectorData

我通过使用 next.js getInitialProps 函数找到了修复程序。

但是我该如何仅使用 React 来实现这样的 onload api 调用呢?

最佳答案

最初data是一个空对象。由于您试图访问该空对象不存在的属性,因此您收到 undefined 。因此,添加一个条件来检查您是否没有数据(或没有键的对象)。例如:

if (!Object.keys(data).length) return <div>No data</div>;

return (
  <>
    {data["Rank A: Real-Time Performance"].Materials}
  </>  
)

关于javascript - 无法读取未定义的属性 'Materials'。使用嵌套对象响应 useState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938970/

相关文章:

reactjs - 类型 'string' 不可分配给类型 keyof [Type]

javascript - 异步 Javascript 程序如何交互

javascript - JavaScript闭包如何工作?

javascript - 如何通过右键单击它来获取 Div Id

java - 将我的 writeJsonFile 函数从 GSON 更改为 Jackson

java - 如何更改 .JSON 文件中的某些值,然后在保留 JSON 格式的情况下将其写回? ( java )

Android:获取json数据并将其解析为 ListView

javascript - 在 Redux reducer 中扩展或克隆 File Web API 对象以支持其他属性

javascript - 将文件对象添加到 redux 存储会导致空属性对象

javascript - 滚动一个元素,打开另一个元素