我有一個這樣的資料串列:
data = [
{
id:1,
name: "boo"
},
{
id:1,
name: "boo"
}
]
我用 react UseState初始化它,如下所示:
const [items, setItems] = useState(data)
我將其映射到我的反應代碼中并將它們可視化。
如果我想洗掉一個,我可以使用以下功能:
const deleteItem = async (id) => {
console.log('BEFORE- - - ->', items);
// this functions calls an api to delete the item
await deleteItem({ id });
setItems((oldItems) =>
oldItems.filter(({ id }) => id !== commentId)
);
console.log('AFTER- - - ->', items);
};
從圖形上看,洗掉專案的組件消失了,但實際上第二個console.log列印的內容與第一個日志相同。在這種情況下,如果我洗掉帶有id:1的元素,我將獲得相同的日志,而我以圖形方式看到該元素消失了。如果我想洗掉多個專案,這會導致索引問題。
你認為哪個是問題?我必須把它變成一個 useEffect 嗎?
uj5u.com熱心網友回復:
設定狀態是一個異步操作。如果您將控制臺放在該函式之外,則在下一次重新渲染時,您將看到您的狀態正確更新(就像您看到您的專案在視覺上消失一樣)。
uj5u.com熱心網友回復:
發生這種情況是因為 setState 是異步的,所以在 console.log 之后狀態確實會發生變化
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350021.html
標籤:javascript 反应 反应钩子
上一篇:如何為重復模式創建正則運算式?
