【问题标题】:Error when reload page with API and React Hooks使用 API 和 React Hooks 重新加载页面时出错
【发布时间】:2021-09-04 21:47:22
【问题描述】:

我有这个组件,它工作正常,但只有一次。如果我重新加载,我有一个未定义的错误。

我的组件:

import { UidContext } from "../components/AppContext"
import React, { useContext, useEffect, useState } from "react"
import axios from "axios"

export default function Balance() {
    const uid = useContext(UidContext)
    const [userWallet, setUserWallet] = useState(null)

    useEffect(() => {
        if (uid !== null) {
            axios.get(`${process.env.REACT_APP_API_URL}api/balance/${uid}`)
                .then((res) => setUserWallet(res.data[0]))
        }
    }, [uid])

    return (
        <section>
            {userWallet.salaire1}
        </section>
    )
}

第一次加载的结果: userWallet result

然后,我有这个错误:

TypeError: Cannot read property 'salaire1' of null

为什么 console.log 可以工作,而不是在 JSX 中?

谢谢

【问题讨论】:

  • 你必须检查用户钱包是否被获取然后渲染它
  • 我猜重新加载时uid是空白的?检查 console.log()
  • @GündoğduYakıcı 如果我记录 uid,我会在重新加载时得到一个 null 和 2 个 uid
  • @AliNajafi 如果我记录数据,则获取很好。我得到数据
  • 最简单的方法是添加问号 op {userWallet?.salaire1}

标签: javascript reactjs api react-redux react-hooks


【解决方案1】:

您可以将可选链接与 userWallet?.salaire1 一起使用。或处理三元条件,如 userWallet.salaire1 &amp;&amp; userWallet.salaire1 在这种情况下,您有预定义的状态值 userWallet 为空。因此 UI 无法呈现未定义的属性,因此您的屏幕为空白并提示错误

实际上你的控制台工作,但它的日志返回两次,第一个是 null 然后显示的数据。

希望我的回答能帮助你理解你的问题:)

【讨论】:

  • 它适用于 userWallet?.salaire1。但是为什么我得到一个 null 然后是 data ?我是不是做错了什么?
  • 其实你没有看错,但这是状态管理的概念,每一个状态都有初始值。并且您已被定义为空值。同样在这种情况下,您从其他资源中获取数据,并且类型是 Promise。我认为处理该问题的正确/常用方法是,您需要设置加载状态以防止应用出现空屏或白屏
猜你喜欢
  • 2018-10-21
  • 2021-08-16
  • 2019-05-17
  • 1970-01-01
  • 2018-05-02
  • 2021-08-26
  • 2022-12-14
  • 2018-03-30
  • 1970-01-01
相关资源
最近更新 更多