为了账号安全,请及时绑定邮箱和手机立即绑定

无法读取未定义的“活动”属性 - React API 调用

无法读取未定义的“活动”属性 - React API 调用

呼啦一阵风 2023-04-27 16:50:24
我想知道我做错了什么。我试图显示从该 API 调用中接收到的数据,但遇到错误。当我使用 React DevTool 检查时,我的状态得到了数据。当我尝试从该对象访问数据时,显示{total.ts}有效但无效。{total.data.active}顺便说一句,我也想知道,我收到了一个对象:useState({})是正确的吗?感谢您的未来答案并帮助我,这可能并不困难。import React, { useEffect, useState } from "react";import Axios from "axios";function Total() {  const [total, setTotal] = useState({});  useEffect(() => {    Axios.get("https://covid2019-api.herokuapp.com/v2/total").then(      (response) => {        setTotal(response.data);      }    );  }, []);  return (    <>      <h1>Hello from Total</h1>      <div className="global-container">        <div className="title-container"></div>        <div className="data-container">{total.data.active}</div>        <div className="date-container">{total.ts}</div>      </div>    </>  );}export default Total;
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您的问题很可能是 total.data.active 会生成一个 js 错误,因为在您获得 ajax 调用响应之前 total.data 是未定义的。对此进行检查可能会解决问题。


这是一个如何完成的示例(我使用 fetch 而不是 Axios 但这不是重要的部分):


import React, { useEffect, useState } from "react";

import "./styles.css";


export default function App() {

  const [total, setTotal] = useState({});


  useEffect(() => {

    fetch("https://covid2019-api.herokuapp.com/v2/total")

      .then((response) => response.json())

      .then((responseBody) => {

        setTotal(responseBody);

      });

  }, []);


  return (

    <>

      <h1>Hello from Total</h1>

      <div className="global-container">

        <div className="title-container"></div>

        <div className="data-container">

          {total && total.data ? total.data.active : ''}

        </div>

        <div className="date-container">{total.ts}</div>

      </div>

    </>

  );

}


查看完整回答
反对 回复 2023-04-27
?
呼唤远方

TA贡献1856条经验 获得超11个赞

您应该在加载数据时添加条件,因为您的 api 调用是异步的


import React, { useEffect, useState } from "react";

import Axios from "axios";


function Total() {

  const [total, setTotal] = useState(null);


  useEffect(() => {

    Axios.get("https://covid2019-api.herokuapp.com/v2/total").then(

      (response) => {

        setTotal(response.data);

      }

    );

  }, []);


  return (

    <>

      <h1>Hello from Total</h1>

      {

        total ? (

         <div className="global-container">

           <div className="title-container"></div>

           <div className="data-container">{total.data.active}</div>

           <div className="date-container">{total.ts}</div>

         </div>

        ) : (

          <div>Loading...</div>

        )

      }

    </>

  );

}


export default Total;


查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信