React 响应多个 console.log

React respond with multiple console.log

我制作了一个功能组件,我的 axios 请求以 2 个未定义和 1 个响应 200 响应。我不明白为什么?

这是我的组件:

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()

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

    console.log(userWallet);

    return (
        <section>
            Test
        </section>
    )
}

回复如下: Result

(ps : 我在 App.js 中使用 React Context 来存储用户 ID)

console.log 将 运行 每次您的组件呈现时,并且您的组件每次重新呈现或道具更改,或状态更改或在这种情况下上下文更改。所以我相信这就是正在发生的事情:

  1. 首次呈现您的组件(“安装时”),未定义 userWallet。
  2. 您的组件的第二次渲染(“上下文更改”),uid 由上下文设置并因此触发重新渲染。
  3. 第三次渲染(“因为 setUserWallet”),userWallet 不是未定义的。

请注意,我认为您的请求只是 运行ning 1 次。如果你把 console.log 移到 axio promise 的 then cb 中,那么你会看到它 运行s 只是 1 次,除非 uid 对象经常变化,那么每次 uid更改请求将再次调用