javascript - React Hook useEffect 缺少依赖项:'fetchTracker'。包括它或删除依赖数组
问题描述
我在我的一个项目中遇到过这个问题。此特定文件跟踪数据,以便可以将其放置在应用程序的地图上。
我在 StackOverflow 上的其他地方查看了该问题的解释和解决方案,但我没有找到任何有效的方法。任何见解将不胜感激。
import { useEffect, useState } from 'react';
import axios from 'axios';
const API_HOST = '...';
const ENDPOINTS = [...];
const defaultState = {...};
const useTracker = ({ api = 'all' }) => {
const [tracker = {}, updateTracker] = useState(defaultState);
async function fetchTracker() {
let route = ENDPOINTS.find(({ id } = {}) => id === api);
let response;
if (!route) {...}
try {...} catch (e) {...}
const { data } = response;
updateTracker((prev) => {
return {
...prev,
state: 'ready',
data
};
});
}
useEffect(() => {
fetchTracker();
}, [api]);
return {
fetchTracker,
...tracker
};
};
export default useTracker;
谢谢
解决方案
您需要包含它以防止副作用。为了防止无限循环将其包装在 useCalback 中:
const useTracker = ({ api = 'all' }) => {
const [tracker = {}, updateTracker] = useState(defaultState);
const fetchTracker = React.useCallback(async () => {
let route = ENDPOINTS.find(({ id } = {}) => id === api);
let response;
if (!route) {...}
try {...} catch (e) {...}
const { data } = response;
updateTracker((prev) => {
return {
...prev,
state: 'ready',
data
};
});
},[api]);
useEffect(() => {
fetchTracker();
}, [api, fetchTracker]);
return {
fetchTracker,
...tracker
};
};
推荐阅读
- java - Files.move / file.renameTo 在多次迭代后都失败(Windows 10),绝对是一个 Java 错误
- javascript - 课后重置编号
- scala - 在持久类型的actor 2.5.17 中存储消息
- java - Chrome 驱动程序尝试在 CI 服务器中加载页面时超时,但在本地工作
- c++ - 确保所有构造函数调用相同的函数 c++,设计模式
- google-cloud-platform - 总体 GCP 数据统计
- json - Perl HTTP 微小响应
- if-statement - if 语句中 proxy_pass 指令的 nginx 替代方案
- unit-testing - 如何检查称为 NSubstitute 的多个重载中的任何一个
- c++ - 为什么目标文件的 debug_str 这么大?