reactjs - 使用扩展运算符更改深层复制值
问题描述
我试图改变的值DataContext
所以我尝试这样:
const changeSecondLabel = index => value => {
setDataContext(dataContext =>
dataContext.map((data, i) =>
i === index
? {
...data,
datasets: [{ ...data.datasets.label, label: value }],
}
: data
)
);
};
这是DataContext
const [DataContext, setDataContext] = useState([
{
labels: defaultLabels,
datasets: [
{
label: "dataSetting",
data: defaultDatas,
backgroundColor: defaultBackgroundColor,
},
],
}, ///
{
labels: defaultLabels,
datasets: [
{
label: "dataSetting",
data: defaultDatas,
backgroundColor: defaultBackgroundColor,
},
],
}, ///
{
labels: defaultLabels,
datasets: [
{
label: "dataSetting",
data: defaultDatas,
backgroundColor: defaultBackgroundColor,
},
],
}, ///....
但是,每当我更改label
to 值时。然后,DataContext
datasets
消失了。我认为深度复制datasets
不是我应该做的,所以我想知道如何解决它。
先感谢您 !
解决方案
我试图复制您提供的代码结构并提出了解决方案。您不能直接将剩余运算符应用于数据集,因为它是一个数组,并且您计划将剩余运算符应用于数据集中的每个元素。
因此,我映射datasets
并应用了深层休息算子。
let dataSet = [
{
labels: "One",
datasets: [
{
label: "dataSetting",
data: "defaultDatas",
backgroundColor: "defaultBackgroundColor",
},
],
},{
labels: "Two",
datasets: [
{
label: "TwodataSetting",
data: "TwodefaultDatas",
backgroundColor: "TwodefaultBackgroundColor",
},
],
},{
labels: "Three",
datasets: [
{
label: "ThreedataSetting",
data: "ThreedefaultDatas",
backgroundColor: "ThreedefaultBackgroundColor",
},
],
},
];
const changeSecondLabel = index => value => {
debugger;
dataSet = dataSet.map((data, i) =>
i === index
? {
...data,
datasets: data.datasets.map(set => {return {...set, label: value}}),
}
: data
)
};
changeSecondLabel(1)("New Value");
console.log(dataSet);
推荐阅读
- html - 具有奇数行的 HTML 表 colspan
- nginx - nginx 服务器:如何从 URL 中删除第一个目录
- python - 何时使用 __iter__() 与 iter()?
- python - python unittest ModuleNotFoundError:没有名为<...>的模块
- android - Android RecyclerView onClickListener
- python - 如果我已经调用了一个类的对象,我可以将它分配给一个变量吗?蟒蛇 3
- sql - 找出过去 30 天不同群体的销售额总和排名前 3 位的客户 - 亚马逊采访
- javascript - 需要知道如何在 javascript 中编写倒计时代码
- c++11 - 使用元组作为函数的参数
- mysql - 如何使用vb将Combobox和checklistbox保存到mysql php中