![](/img/trans.png)
[英]Trying to update an array in an object inside of an object. React, useState
[英]trying to create object inside array of an object react
我试图对此进行研究,但我似乎无法弄清楚。 所以我有这个 function
const addWork = () => {
setWorkArray([...workArray, { id: uniqid(), company: '', title: '', dateFrom: '', dateTo: '', desc: [], editing: true }]);
};
这会将 object 添加到我的 workArray,我正在尝试弄清楚如何将 object 添加到 desc 数组。 我想我在正确的轨道上我只是无法正确地弄清楚下面的 function。
const addWorkDesc = (itemId) => {
let f;
const inOf = workArray.filter((item, index) => {
f = index;
return item.id == itemId;
});
setWorkArray({ ...workArray, ...workArray[f].desc, desc: [{ id: uniqid(), item: '', editing: true }] });
};
基本上,当我尝试将 object 推入 desc 数组时,workArray 看起来像这样
[
{
id: 1asd5y, //generated with uniqid()
company: 'some company',
title: 'peon',
dateFrom: 'fall 2012',
dateTo: 'spring 2014',
desc: [
{
id: 5d554ty, //generated with uniqid()
item: 'some text here',
editing: true
},
{
id: 9s9d87f, //generated with uniqid()
item: 'some text here',
editing: true
},
],
editing: true
},
{
id: 0s09d8f, //generated with uniqid()
company: 'some company',
title: 'peon',
dateFrom: 'fall 2012',
dateTo: 'spring 2014',
desc: [
{
id: 34kjh5, //generated with uniqid()
item: 'some text here',
editing: true
},
{
id: 77cvb7, //generated with uniqid()
item: 'some text here',
editing: true
},
],
editing: true
},
]
因此,这不如您的解决方案优雅,但可以完成工作。
let workArray = [];
const addWork = () => {
workArray = [
...workArray,
{
id: "a",
company: "",
title: "",
dateFrom: "",
dateTo: "",
desc: [],
editing: true,
},
];
};
const addWorkDesc = (itemId) => {
let newWorkArray = [];
workArray.forEach((item) => {
if (item.id === itemId) {
item.desc.push({ id: "aa", item: "", editing: true });
}
newWorkArray.push(item);
});
workArray = newWorkArray;
};
addWork();
console.log(workArray);
addWorkDesc("a");
console.log(workArray);
logs -> [
{
id: 'a',
company: '',
title: '',
dateFrom: '',
dateTo: '',
desc: [],
editing: true
}
]
then
logs -> [
{
id: 'a',
company: '',
title: '',
dateFrom: '',
dateTo: '',
desc: [ [Object] ],
editing: true
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.