recherche

Maison  >  Questions et réponses  >  le corps du texte

Résoudre le problème de la boucle infinie provoquée par useEffect dans React

<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>
P粉018548441P粉018548441499 Il y a quelques jours487

répondre à tous(1)je répondrai

  • P粉574695215

    P粉5746952152023-08-15 12:13:13

    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.

    const useBoard = () => {
      const { data: columnData } = useGetColumnQuery();
      const { data } = useGetTaskAccordingToStatus();
      const [finalState, sFinalState] = useState([]);
    
      useEffect(() => {
        const allColumns = columnData?.data?.map((item) => ({
          name: item.name,
          _id: item._id,
          tasks: [],
        }));
          console.log("meeee data deps");
          const updatedColumns = allColumns.map((column) => ({
            ...column,
            tasks: data.flat().filter((task) => task.status === column.name),
          }));
          sFinalState(updatedColumns);
      }, [columnData, data]);
    
      return {
        finalState,
      };
    };

    répondre
    0
  • Annulerrépondre