![](/img/trans.png)
[英]Create a new array of objects by property value from existing object add existing objects to new array
[英]Add new child objects to existing object in React
我正在尝试通过 useState 更新一个子 object 和一个额外的 object。 我创建了一个示例以使这一点更清楚:
https://codesandbox.io/s/affectionate-wescoff-u01x0?file=/src/App.js
示例 object 如下所示:
{
"id": 123,
"books": {
"book": {}
}
}
当我推送更多数据时,我希望它看起来像这样:
{
"id": 123,
"books": {
"book": {
"name": "Sirens of Titan",
"author": "Kurt Vonnegut"
},
"book": {
"name": "The Hobbit",
"author": "J.R.R. Tolkein"
}
}
}
在这个阶段,我把它搞砸了,它看起来像:
{
"id":123,
"books":[
{
"0":{
"book":{
},
"sampleData1":{
"book":{
"name":"Sirens of Titan",
"author":"Kurt Vonnegut"
}
}
},
"sampleData2":{
"book":{
"name":"The Hobbit",
"author":"J.R.R. Tolkein"
}
}
}
]
}
这是我设置损坏的 object 的方式:
const [main, setMain] = useState(library);
function addNestedObj() {
setMain({ ...main, books: [{ ...main.books, sampleData1 }] });
}
只需将解构更进一步:
setMain({...main, kids: [...main.kids, secondObj]})
您的library
object 的books
属性是 object,而不是数组。 这可能是必要的,但我猜这不是因为您的 book 对象已经具有name
属性,因此它们不需要单独的键。
通过该更改,您可以修改setMain
function 以将 sampleData 的book
属性添加到sampleData
的books
属性:
setMain({ ...main, books: [...main.books, sampleData1.book] });
我在您的 CodeSandbox 的一个分支中添加了这些更改: https://codesandbox.io/s/modest-fog-byegh?file=/src/App.js
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.