首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取未定义的属性'Materials‘。使用嵌套对象反应useState

无法读取未定义的属性'Materials‘。使用嵌套对象反应useState
EN

Stack Overflow用户
提问于 2019-09-15 04:17:50
回答 1查看 163关注 0票数 0

我正在尝试将此API调用的结果存储到我的状态中。当我试图在JSX中调用任何'data‘状态的对象时,例如: data"Rank A: Real-Time Performance".Materials,我得到了未定义的错误。如果状态变量不是嵌套对象,则可以很好地工作。有谁能告诉我怎么走吗?是我做错了什么,还是这是不好的做法?谢谢

这是API响应的一个示例

代码语言:javascript
复制
{
"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代码:

代码语言:javascript
复制
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调用呢?

EN

回答 1

Stack Overflow用户

发布于 2019-09-15 04:26:42

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

代码语言:javascript
复制
if (!Object.keys(data).length) return <div>No data</div>;

return (
  <>
    {data["Rank A: Real-Time Performance"].Materials}
  </>  
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57938970

复制
相关文章

相似问题

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