我正在嘗試更新存盤在我的 useState 掛鉤“專案”中的物件。代碼塊 1 不起作用,但代碼塊 2 起作用。我所做的唯一一件事就是將我的專案放在一個新變數中。有人可以解釋為什么代碼塊 1 不起作用而代碼塊 2 起作用。
不作業
const Users = () => {
const [items, setItems] = useState('');
const folder = {
id: itemId,
title: text,
location: itemLocation,
};
// get object index
const objIndex = items.findIndex(obj => obj.location === itemLocation);
// update object
items[objIndex] = folder;
// set state with update
setItems([...items]);
};
下面的作品
const Users = () => {
const [items, setItems] = useState('');
const folder = {
id: itemId,
title: text,
location: itemLocation,
};
// put state into variable
const myItems = [...items]
// get object index
const objIndex = items.findIndex(obj => obj.location === itemLocation);
// update object
myItems[objIndex] = folder;
// set state with update
setItems(myItems);
};
uj5u.com熱心網友回復:
items[objIndex] = folder;
你永遠不應該像這樣直接更新狀態。React 假設你總是使用“set”函式來更新你的狀態,如果你直接修改狀態,將不知道什么時候重新渲染你的組件。
https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly
uj5u.com熱心網友回復:
// update object
items[objIndex] = folder;
我相信這就是問題所在。我實際上從未嘗試過更改狀態本身(我一直認為它是只讀的)。
稍后我將進一步測驗以確保。但通常你不會直接編輯狀態(狀態意味著items變數)。要么你1)創建一個items1如items1 = { ...items }再setItems(items1[objIndex] = folder)或者你跟隨你的第二代碼片段的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/370070.html
標籤:javascript 反应 反应原生
上一篇:我的狀態值應該重新渲染整個組件,這應該再次將我的其他狀態值設定為默認值,但它沒有發生
下一篇:算術序列Ruby
