【发布时间】:2021-04-23 04:43:15
【问题描述】:
我试图理解为什么下面的 useEffect 在无限循环中运行。我制作了fetchSchedule 辅助函数来调用getSchedule 服务(使用Axios 查询API 端点)。我没有在 useEffect 挂钩中定义此函数的原因是因为我想在调用 onStatus 函数时也调用它(这会在单独的端点上切换布尔 PUT 请求)。
eslinter 要求将 fetchSchedule 添加到依赖项数组中,这似乎触发了无限循环。
它应该工作的方式是在第一次渲染时从数据库中获取数据,然后仅在每次更新 value 属性或切换 onStatus 按钮时。
到目前为止,我的研究似乎表明这可能与 useEffect 处理异步函数和闭包的方式有关。我仍在尝试理解 Hooks,显然我的代码中有些东西没有...
import React, { useEffect, useCallback } from 'react';
import useStateRef from 'react-usestateref';
import { NavLink } from 'react-router-dom';
import { getSchedule, updateStatus } from '../../services/scheduleService';
import Status from './status';
// import Pagination from './pagination';
const List = ({ value }) => {
// eslint-disable-next-line
const [schedule, setSchedule, ref] = useStateRef([]);
// const [schedule, setSchedule] = useState([]);
const fetchSchedule = useCallback(async () => {
const { data } = await getSchedule(value);
setSchedule(data);
}, [value, setSchedule]);
const onStatus = (id) => {
updateStatus(id);
fetchSchedule();
console.log('fetch', ref.current[0].completed);
};
useEffect(() => {
fetchSchedule();
}, [fetchSchedule]);
return (...)
【问题讨论】:
-
也许这个答案可以帮助你? stackoverflow.com/questions/53332321/…
标签: reactjs react-hooks