J'ai essayé de résoudre ce problème, mais quelle que soit la solution que je fais, elle est toujours bloquée dans une boucle infinie.
Voici le code
const [carr, setCarr] = useState({})
useEffect(() => {
sortedRosterCollection.once('value', (snap) => {
snap.forEach((doc) =>{
if (doc.key==="Carr Intermediate"){
var school = doc.key;
var mentorList = doc.val();
var schoolMentor = {school:school, mentors: mentorList};
setCarr(schoolMentor)
console.log(carr)
}
});
});
},[carr]);
Quoi que je fasse, "console.log (carr)" est déclenché à l'infini.
3 Réponses :
Si vous souhaitez inspecter la valeur de carr chaque fois qu'elle est modifiée, mettez-la dans un autre effet d'utilisation:
const [carr, setCarr] = useState({})
useEffect(() => {
sortedRosterCollection.once('value', (snap) => {
snap.forEach((doc) => {
if (doc.key === "Carr Intermediate") {
var school = doc.key;
var mentorList = doc.val();
var schoolMentor = {
school: school,
mentors: mentorList
};
setCarr(schoolMentor)
}
});
});
}, []);
useEffect(() => {
console.log(carr)
}, [carr])
Vous n’oubliez pas la fonction de nettoyage dans useEffect hook comme ceci:
useEffect(() => {
effect
return () => {
cleanup
}
}, [input])
J'avais l'habitude de faire ce problème comme vous parce que useEffect peut comparer deux objets. Vous pouvez faire la référence au lien: https: / /medium.com/javascript-in-plain-english/comparing-objects-in-javascript-ce2dc1f3de7f . Et je vérifie les modifications en utilisant le code ci-dessous:
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
Vous définissez la valeur
carrdans le même useEffect qui est déclenché lorsquecarrest modifié, provoquant une boucle infinie. Vous ne voyez pas pourquoi vous devez l'avoir dans la liste des dépendances.