所以我有一個包含朋友和活動的應用程式,每個朋友都有特定的活動。
我只想從每個朋友那里檢索每個事件。
我有一個“事件”狀態 const [events, setEvents] = useState([]);
然后這是有問題的useEffect片段:
useEffect(() => {
getFriendsIds()
.then(idsArray => {
Promise.all(idsArray.map(id => {
getUserEvents(id)
.then(evs => {
if (evs.length > 0) {
for (let i=0; i<evs.length; i ) {
setEvents([...events, evs[i]]);
}
}
})
}))
})
}, [])
這應該將上述事件存盤在“事件”狀態變數中。
但是,當我嘗試使用 渲染它們時{events.map(ev => renderItem(ev))},我只會得到回圈中最后一個朋友的最后一個事件(保證 renderItem 可以正常作業)。
我很想解釋它是如何作業的,如果可能的話,還有一個替代演算法可以真正實作我的目標。
謝謝
uj5u.com熱心網友回復:
實際上,發生這種情況是因為您的依賴陣列useEffect()中沒有events狀態。
useEffect(() => {
...
}, [events])
但是,由于該setState()功能異步作業,因此該解決方案將無法正常作業。
在這種情況下,您必須使用狀態更新器功能:
useEffect(() => {
...
setEvents((prevEvents) => [...prevEvents, evs[i]]);
...
}, []);
閱讀更多關于官方檔案的dependency array資訊state updater
uj5u.com熱心網友回復:
嘗試將函式傳遞給 setEvents 并洗掉 for 回圈。
if (evs.length > 0) {
setEvents((prev) => ([...prev, ...evs]));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416707.html
標籤:
