3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
對于這種數(shù)據(jù)模型,我寧愿使用 useReducer 鉤子。就個(gè)人而言,我覺得它更干凈。
但是你的問題是,你沒有改變并返回你的 subOptions 。
setOptions(
options.map((x, index) => {
if (index !== optionIndex) return x;
x.subOptions = x.subOptions.map((subItem, subIndex) => {
console.log(subItem);
if (subIndex !== subOptionIndex) return subItem;
return {
...subItem,
text: text
};
});
return x;
}),
);

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
我建議您使用不變性庫,例如immer.js。這將允許您精確地選擇要在您的州內(nèi)更新的內(nèi)容。
這將允許您像這樣修改您的選項(xiàng):
import produce from "immer"
const newOptions = produce(options, draftOptions => {
draftOptions[2].subOption[1] = [whatever you want]
})
setOptions(newOptions)

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
按照您的解決方案,您錯(cuò)過了第一個(gè)返回mapif index === optionIndex。
setOptions((options) => {
return options.map((x, index) => {
if (index !== optionIndex) return x;
return {
...x,
subOptions: x.subOptions.map((subItem, subIndex) => {
if (subIndex !== subOptionIndex) return subItem;
return {
...subItem,
text: text
};
})
}
})
})
否則你可以使用類似immer.js
添加回答
舉報(bào)