1 回答

TA貢獻1111條經驗 獲得超0個贊
你做的一切都是正確的。當您登錄“第二個 Console.log”時,該值尚未分配給您的變量,因為您將其設置在異步函數內部。如果您在代碼中的任何位置使用此變量,只需在訪問其中的屬性之前檢查它是否已設置。
Edit1:不確定是否是這種情況,以及您得到什么樣的響應,但也許嘗試將其轉換為 json,看看它是否有所作為。
const response = await api.get(`/service`);
const data = await response.json();
Edit2:我想我明白發生了什么:) 當您第二次登錄對象時,它尚未設置,因此當您嘗試訪問該值時 - 您會收到錯誤消息。您在登錄對象本身時看到它的原因是因為您打印了對該對象的引用,因此如果它在幾毫秒后被分配,它仍然會被打印。
如果您第二次在沒有參考的情況下打印它,很可能它仍然是空的,請嘗試: console.log("second Console.log ", Object.assign({}, allServices))
Edit3 要查看您是否正在設置值,請嘗試執行以下操作,看看您是否能夠使用它
const Dashboard = () => {
const [allServices, setAllServices] = useState();
useEffect(() => {
onLoadSerivces();
}, []);
const onLoadSerivces = async () => {
try {
const { data } = await api.get('/service');
const result = response.data.data;
console.log('first log ', result[0]);
setAllServices(result);
} catch (err) {
const error = JSON.stringify(err.message);
alert(error);
}
};
// assume this will be an array
render() {
return allServices && allServices.map(service => {
console.log('Second log ', service);
return <div>{service.status}</div>;
});
}
};
添加回答
舉報