React-无法访问 useEffect 钩子之外获取的数据
我正在尝试使用 useEffect 钩子和 fetch API 从我在 React 中创建的 NodeJS 服务器中获取数据。问题是我无法在 useEffect 回调之外访问这些数据 这是我的代码:
import React, { useEffect, useState } from "react";
const App = () => {
const [LCS_Data, setLCSData] = useState({});
useEffect(() => {
fetch("http://localhost:5000/lcs")
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data);
console.log(data.LCS.info);
setLCSData(data);
});
}, []);
// console.log(LCS_Data.LCS.info);
return <div className="main"></div>;
};
export default App;
这是 useEffect 中两个 console.log 的输出: 浏览器中第一个 console.log 的输出
所以一切都正常,数据的结构应该如此,没有以任何方式损坏
直到我在 return 语句之前取消对 console.log 的注释
它抛出这个 错误
TypeError: Cannot read properties of undefined (reading 'info')
指向最后一个 console.log,而数据显然在那里。
我如何访问我的数据对象内的属性超出了 useEffect 钩子的范围,因此我通常可以在我的应用程序中使用它
在第一次渲染中,
LCS_Data
具有您在
useState
(
{
) 中提供的值。
useEffect
仅在渲染后运行,因此当我们到达您的
console.log
时,从
{
访问
.LCS.info
会出现错误。只有在
setLCSData(data)
触发重新渲染后,当
fetch
调用返回时,
LCS_Data
才会成为从 API 返回的值。因此,在这种情况下,您可以:
-
将默认值(如
{ LCS: { info: 'default info' }
)传递给 useState,以便在useEffect
运行并且fetch
调用返回之前,您有一个要打印出来的LCS_Data.LCS.info
值。 -
如果还没有值,请使用可选链 (
LCS_Data.LCS?.info
) 打印出undefined
。
请注意,它应该这样工作:在
useEffect
触发并且
fetch
调用返回之前,您不会从服务器获得该值。您应该做的是在发生这种情况之前提供一个默认值。