3 回答
TA贡献1876条经验 获得超5个赞
对于这种数据模型,我宁愿使用 useReducer 钩子。就个人而言,我觉得它更干净。
但是你的问题是,你没有改变并返回你的 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贡献1789条经验 获得超8个赞
我建议您使用不变性库,例如immer.js。这将允许您精确地选择要在您的州内更新的内容。
这将允许您像这样修改您的选项:
import produce from "immer"
const newOptions = produce(options, draftOptions => {
draftOptions[2].subOption[1] = [whatever you want]
})
setOptions(newOptions)
TA贡献1943条经验 获得超7个赞
按照您的解决方案,您错过了第一个返回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
添加回答
举报