Как исправить это предупреждение "React Hook useEffect имеет отсутствующую зависимость"?
Вот мой файл:
// useFetcher.js
import { useEffect, useState } from "react";
export default function useFetcher(action) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const [data, setData] = useState(null);
async function loadData() {
try {
setLoading(true);
const actionData = await action();
setData(actionData);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
useEffect(() => {
loadData();
}, [action]);
return [data, loading, error];
}
В строке 21 можно указать следующие жалобы:
React Hook useEffect has a missing dependency: 'loadData'. Either include it or remove the dependency array.eslint(react-hooks/exhaustive-deps)
Как я могу это исправить?
2 ответа
Решение
Лучшим способом здесь было бы определить вашу асинхронную функцию внутри useEffect
:
export default function useFetcher(action) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const [data, setData] = useState(null);
useEffect(() => {
async function loadData() {
try {
setLoading(true);
const actionData = await action();
setData(actionData);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
loadData();
}, [action]);
return [data, loading, error];
}
Больше информации в документации.
Добавить loadData
функция в массив в вашем useEffect
. Это избавит от жалобы:
useEffect(() => {
loadData();
}, [action, loadData]);