簡體   English   中英

useEffect 中的無限循環,useEffect 中的 async/await

[英]Infinite loop in useEffect, async/await in useEffect

我知道這個問題已經被問了很多 - 但我需要一些幫助!

我希望getExistingCards()updateActivity()之前執行和setCards

getExistingCards()應該setCards如果1) 卡片存在,並且 2) cards一個空數組(如果cards已經設置為existingCards ,我不想將 setCards 設置為existingCards !)

下面的工作完美,所以這不應該改變。

  const [cards, setCards] = useState([]);

  useEffect(() => {
    updateActivity(path, cards);
  }, [cards]);

在下面添加getExistingCards()會導致無限循環(這是有道理的,因為我知道我在效果中設置狀態,並且卡片也在依賴項數組中):

  // useLayoutEffect executes before useEffect
  useLayoutEffect(() => {
    const getExistingCards = () => {
      if (activity) {
        if (path.field === "activity_milestones" || path.field === "activity_indicators") {
          let existingItems = activity[path.field]
          if (existingItems) {
            setCards(existingItems);
          }
        }
      }
    };
    getExistingCards();
  }, []);

  useEffect(() => {
    updateActivity(path, cards);
  }, [cards]);

我還嘗試將updateActivity()getExistingCards()添加到實現異步/等待的useEffect中,但意識到getExistingCards()實際上並不是一個承諾。

任何見解將不勝感激 - 謝謝

在執行嵌入式功能之前只需檢查卡片的長度

  useEffect(() => {
   if (cards.length === 0) updateActivity(path, cards);
  }, [cards]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM