[英]React Hook useEffect has a missing dependency: 'fetchTracker'. Either include it or remove the dependency array
I have come across this issue in one of my projects.我在我的一个项目中遇到过这个问题。 This specific file tracks data so that is can be placed on a map in an application.
该特定文件跟踪数据,以便将其放置在应用程序中的地图上。
I have looked elsewhere on StackOverflow for an explanation and resolution for the issue, but I haven't found anything that works.我在 StackOverflow 上的其他地方查看了该问题的解释和解决方案,但我没有找到任何有效的方法。 Any insight would be appreciated.
任何见解将不胜感激。
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;
Thanks谢谢
You need to include it to prevent side effect.您需要包含它以防止副作用。 To prevent a infinity loop wrap it in useCalback:
为了防止无限循环将其包装在 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
};
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.