我正在使用 React 并嘗試使用 setState 鉤子來更新嵌套物件中的值,正如您從標題中所理解的那樣??
我設法讓它在某種程度上作業,但不是獲得我以前擁有的原始物件陣列,而是獲得一個索引物件作為我的回傳值。
所以我正在使用的物件看起來像這樣:
{
category: ""
level: ""
name: ""
rarity: ""
requirements: [ {name: "", customValue: 0 <--- that I wish to update }, {name: "", customValue: 0 }]
}
當我試圖更新這個值的狀態時,我設法把它歸結為這個。屬性的索引是已知的。
setItemUpdated((prev) => ({
...prev,
requirements: { ...prev.requirements, [idx]: { ...prev.requirements[idx], customValue: val } },
}));
這在某種程度上是有效的。但不是 [ {}, {} ] 我得到 [ 1:{} 2:{} ]。我明白為什么我會得到這個,因為我將第一個要求設定為一個物件,但是,當我嘗試用陣列包裝內部時,我永遠無法編譯任何東西。我真的不知道它的語法是怎樣的。
我試圖在 SO 上搜索類似的執行緒,這無疑是存在的,但找不到任何東西。我希望你能在這里幫助我!
先感謝您!
uj5u.com熱心網友回復:
長手解決方案是簡單地在索引前后對陣列進行切片,并在索引處展開物件。
setItemUpdated((prev) => ({
...prev,
requirements: [
...prev.requirements.slice(0, idx),
{ ...prev.requirements[idx], customValue: val },
...prev.requirements.slice(idx 1),
],
}));
uj5u.com熱心網友回復:
目前我自己實際上正在使用類似的東西,我正在做的程序是復制狀態資料,根據輸入(在您的情況下稱為 prev)進行編輯。因為我剛剛看到這個問題,所以在這里拋出一個快速的潛在答案。
const data = { ...useStateData.data };
data[input.name] = input.value;
setUseStateData({ data});
因此,您可能需要執行以下操作:
data.requirements['name'] = updatedvalue;
希望有幫助 -
uj5u.com熱心網友回復:
正如您已經提到的,您正在嘗試在物件內傳播一個陣列,結果用陣列的索引/值對填充物件。
我會做類似以下的事情(以不變的方式):
setItemUpdated(prev => ({
...prev,
requirements: prev.requirements.map((prevRequirement, index) => index === idx
? {...prev.requirements[idx], customValue: val}
: prevRequirement
),
}));
它本質上是映射prev.requirements,如果找到已知索引,則替換/修改該物件,否則回傳prevRequirementfrom 陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355559.html
標籤:javascript 反应 钩
