Bonjour, je rencontre un problème avec le useEffect
dans React. Le code ci-dessous fonctionne comme il le devrait, mais es-lint suggère que je dois fournir les dépendances dans le tableau de dépendances de l'élément useEffect
.
Code de travail avec // eslint-disable-next-line react-hooks/exhaustive-deps
export default function UsersList() {
const [users, setUsers] = useState<User[]>([]);
const { setError } = useContext(errorContext);
const { isLoading, setIsLoading } = useContext(globalContext);
useEffect(() => {
if (users.length < 1) {
fetchUsers();
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
async function fetchUsers () {
try {
setIsLoading(true);
const fetchedUsers = await api.getUsers();
setUsers(fetchedUsers);
} catch (error) {
setError(error);
} finally {
setIsLoading(false);
}
}
}
Code de bouclage infini
J'ai essayé de l'écrire comme ça, mais le code déclenche une boucle infinie (parce que les états changent constamment dans la fonction et déclenchent la boucle infinie). useEffect
à chaque fois à cause des dépendances déclarées)
useEffect(() => {
async function fetchUsers () {
try {
setIsLoading(true);
const fetchedUsers = await api.getUsers();
setUsers(fetchedUsers);
} catch (error) {
setError(error);
} finally {
setIsLoading(false);
}
}
if (users.length < 1) {
fetchUsers();
}
}, [setIsLoading, setError, users]);
J'ai également essayé de mettre le fetchUsers()
dans le tableau des dépendances, mais cela n'a eu aucun effet.
Comment puis-je configurer correctement un appel asynchrone lors du montage du composant sans avoir à utiliser la fonction // eslint-disable-next-line react-hooks/exhaustive-deps
?