Résoudre le problème de la boucle infinie provoquée par useEffect dans React
P粉018548441
2023-08-14 18:47:03
<p>Pourquoi ce code produit-il une boucle infinie dans React. Le useEffect ici avec data et columnDataWithTaskProperty provoque une boucle infinie, mais je ne sais pas pourquoi</p>
<pre class="brush:php;toolbar:false;">const useBoard = () =>
const { data: columnData } = useGetColumnQuery();
const { données } = useGetTaskAccordingToStatus();
const [columnDataWithTaskProperty, setColumnDataWithTaskProperty] = useState(
[]
);
const [finalState, sFinalState] = useState([]);
useEffect(() => {
const allColumns = columnData?.data?.map((item) => ({
nom : article.nom,
_id : article._id,
Tâches: [],
}));
setColumnDataWithTaskProperty(allColumns);
}, [colonneDonnées]);
useEffect(() => {
console.log("meeee data deps");
const updateColumns = columnDataWithTaskProperty.map((column) => ({
...colonne,
tâches : data.flat().filter((task) => task.status === column.name),
}));
sFinalState (colonnes mises à jour);
}, [columnDataWithTaskProperty, données]);
retour {
état final,
} ;
};</pré>
<p>Voici comment j'utilise useGetTaskAccordingToStatus pour obtenir les données. J'ai utilisé React Query pour obtenir les données. </p>
<pre class="brush:php;toolbar:false;">const useGetTaskAccordingToStatus = () =>
const { active_project } = useSelector (projectDataInStore);
const userQueries = useQueries({
requêtes : statesOfTaskManager.map((status) => {
retour {
queryKey : [statut, actif_project],
requêteFn : () =>
customAxiosRequestForGet("/tâche", {
statut,
Nom du projet : projet_actif,
}),
onSuccès : ({ données }) => {
renvoyer des données ;
},
} ;
}),
});
const data = userQueries?.map((item) => item?.data?.data);
renvoyer { données } ;
};</pré>
<p><br /></p>
Je vous suggère simplement d'utiliser un effet d'utilisation et de supprimer columnDataWithTaskProperty pour tester le sac, vous pourrez y revenir plus tard. Ceci est un exemple de ma suggestion, mais ne peut pas être testé sans données réelles.