[英]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.