Avertissement React : la profondeur de mise à jour a dépassé la limite maximale lors de la mise à jour de l'état dans useEffect
P粉447785031
P粉447785031 2023-09-06 13:46:55
0
1
458

J'essaie de mettre à jour ma variable d'état qui est un objet contenant une variable booléenne. Une fois les données disponibles (en réponse à un appel API invoqué lors d'un clic sur un bouton), je mets à jour mon état dans useEffect. Ensuite, avec ces données, j'appelle un autre composant, un modal, et si aucune donnée n'est disponible, j'affiche un autre modal. Lorsque je ferme la fenêtre contextuelle, la variable d'état doit être mise à jour.

const [modalState, setModalState] = useState({ showNoUsersModal: false, showModal: false, }); useEffect(() => { if (data && data.length > 0) { setModalState({ ...modalState, showModal: true, showNoUsersModal: false, }); } else if (data && data.length === 0) { setModalState({ ...modalState, showModal: false, showNoUsersModal: true, }); } }); const onApplicationSuccess = () => { setModalState({ ...modalState, showModal: false, showNoUsersModal: false, }); } const onClose = () => { setModalState({ ...modalState, showModal: false, showNoUsersModal: false, }); } return ( 
{modalState.showNoUsersModal && ( setModalState({ ...modalState, showModal: false, showNoUsersModal: false, }) } /> )} {modalState.showModal && ( setModalState({ ...modalState, showModal: false, showNoUsersModal: false, }) } /> )}
)
P粉447785031
P粉447785031

répondre à tous (1)
P粉163465905

ce problème était dû au fait que vous n'aviez transmis aucun tableau de dépendances à useEffect, donc chaque fois que l'état changeait, useEffect appelait à nouveau, voici la solution.

.
useEffect(() => { if (data && data.length > 0 ) { setModalState({ ...modalState, showModal: true, showNoUsersModal: false, }); } else if (data && data.length == 0) { setModalState({ ...modalState, showModal: false, showNoUsersModal: true, }); } },[]);

Le problème est que vous ne transmettez aucun tableau de dépendances à useEffect, donc useEffect sera appelé à nouveau à chaque fois que l'état change. Voici la solution.

useEffect(() => { if (data && data.length > 0 ) { setModalState({ ...modalState, showModal: true, showNoUsersModal: false, }); } else if (data && data.length == 0) { setModalState({ ...modalState, showModal: false, showNoUsersModal: true, }); } },[]);
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!