React.useEffect (() => {
if (rows.length === 0) {
async function fetchMyApi() {
const url = `https://reqres.in/api/users?page=2`;
let res = await fetch(url);
res = await res.json();
if (res) {
setRows (res.data);
}
}
fetchMyApi();
}
}, [rows]);
在useEffect中调用API会创建无限循环。我尝试过传递一个空数组,我尝试过所有可能的解决方案,但没有用。
每次调用setRows
时,useEffect
依赖项[rows]
会导致useEffect
重新填充,从而创建一个无限循环。
const [rows,setRows] = React.useState([]);
const fetchMyApi = React.useCallback(async () => {
const url = `https://reqres.in/api/users?page=2`;
let res = await fetch(url);
res = await res.json();
if (res){
setRows (res.data);
}
}, [setRows]);
React.useEffect (() =>{
fetchMyApi();
},[fetchMyApi]);
在上面的代码中,useCallback
不是必需的,因为该函数没有传递给任何组件。
setRows
应在组件的使用寿命内保持恒定。
fetchMyApi
将在组件装载上创建,并且每次setRows
更改时都会创建。
useEffect
将在装载时运行,每次fetchMyApi
更改时都会运行。由于fetchMyApi
永远不会更改,因此useEffect
仅在组件装载时运行。