【发布时间】:2020-10-19 04:46:18
【问题描述】:
我以为useEffect 只在渲染后调用一次,但它被执行了多次,而且不是按照我预期的顺序。
我希望它在提取过程中发送消息“数据加载”,然后在提取完成后,呈现标题字段并警告“..Done...”一次,这应该是结束。
我在两个点添加了 ALERT 和控制台日志以确定流程,并且警报和控制台日志都以不同的顺序出现不止一次。您能否运行此代码并查看行为。我将第二个参数数组保留为 null 以使其仅运行一次但没有帮助。
请澄清反应 RENDER 是否意味着在屏幕上显示? LOAD表示什么阶段?什么时候展示?
代码如下:
import React, { useEffect, useState } from "react";
//import "./App.css";
function DemoFetchZ() {
let data = { title: "Waiting for Data" };
const [todo, setTodo] = useState(data);
const [isData, setData] = useState(false);
const [isFetching, setFetching] = useState(false);
useEffect(() => { // called after the first render
async function fetchData() {
setFetching(true);
const response = await fetch(
"https://jsonplaceholder.typicode.com/todos/1"
);
console.log("response = ", response);
let data = await response.json();
setTodo(data); //updt state
setFetching(false);
setData(true)
console.log("Data = ", data);
}
fetchData();
}, []); //[isData] null value will execute once only?
if (isFetching) {
console.log("data loading ......")
alert ("data loading")
return (<div>...Data Loading.....</div>);
}
return (
<div>
- Fetch
<br /> {alert("..DONE...")}
<span>Title: {todo.title}</span>
</div>
);
}
export default DemoFetchZ;
【问题讨论】:
标签: javascript reactjs fetch fetch-api use-effect