【发布时间】:2021-12-14 16:15:38
【问题描述】:
我尝试阅读有关 promise 和 async 的内容,等待了很多,但对我没有帮助。请赐教。
import logo from "./logo.svg";
import "./App.css";
import React from "react";
function App() {
const [stateData, setStateData] = React.useState("");
const testGetData = async () => {
const data = await fetch("/api/products/test").then((response) => {
return response;
});
return data;
};
let productData = [];
testGetData().then((response)=>{
return response.json();
}).then((res)=>{
productData.push(res);
});
console.log(productData);
console.log(productData[0].productName);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>{stateData}</p>
</header>
</div>
);
}
export default App;
【问题讨论】:
-
请将代码粘贴到您的问题中,而不是使用屏幕截图。
-
productData最初是一个空数组。所以productData[0]不可用(undefined)。所以你正在尝试productData[0].productName,这意味着你正在尝试访问未定义的属性productName -
您需要使用
setStateData(res)而不是productData.push(res)来导致重新渲染。您需要将fetchData()调用放入useEffect挂钩中。 -
数据是异步的,所以你需要等到数据准备好,然后再尝试读取它。
-
抱歉截图贴。下次我会避免截图询问。我将尝试 setState 以及如何等待数据准备好读取。
标签: javascript reactjs express mern