在 React 中更新状态对象字段的正确方法
Correct way to update sate object field in React
我正在尝试以正确的方式将数组添加到状态对象的字段,但我似乎无法弄明白。
我有两个独立的功能组件。
组件A构成对象的开头:
const beginning = {
FormId: 0,
Company: "",
CreatedBy: "",
CreatedWhen: "",
LastModified: "",
LastModifiedBy: "",
Payload: []
}
组件 B 为 Payload
字段(对象数组)生成值。所以最终对象看起来像这样:
const finishedJSON = {
FormId: 0,
Company: "",
CreatedBy: "",
CreatedWhen: "",
LastModified: "",
LastModifiedBy: "",
Payload: [
{
item: 1
},
{
item: 2
}
]
}
来自组件 A 的对象作为名为 metaData
的 prop 传递给组件 B
在组件 B 中,我试图将对象数组添加到对象的 Payload
字段。
到目前为止,我试过这个但没有用:
export default function ComponentB({metaData}) {
...
const [finishedJSON, setFinishedJSON] = useState(metaData);
...
setFinishedJSON({
...finishedJSON,
Payload: PayloadDataFromComponentB
})
})
...
}
我试过使用它并且有效:
export default function ComponentB({metaData}) {
...
const [finishedJSON, setFinishedJSON] = useState(metaData);
...
setFinishedJSON( data => {
data.Payload = PayloadDataFromComponentB;
})
...
}
但是,我读到 here 这在 React 中是不好的做法。
我也尝试了文章中的 useImmer
解决方案,不幸的是它没有用新的 Payload
数据更新对象
有没有更好的方法来更新Payload
字段?我只想使用最佳实践。如果我不清楚,请告诉我。谢谢!
您可以创建一个具有所有属性的全新对象。它不会变异。它只是 returns 一个全新的对象。
setFinishedJSON((data) => {
return {
...data,
payload: [ ...PayloadDataFromComponentB ]
}
});
我正在尝试以正确的方式将数组添加到状态对象的字段,但我似乎无法弄明白。
我有两个独立的功能组件。
组件A构成对象的开头:
const beginning = {
FormId: 0,
Company: "",
CreatedBy: "",
CreatedWhen: "",
LastModified: "",
LastModifiedBy: "",
Payload: []
}
组件 B 为 Payload
字段(对象数组)生成值。所以最终对象看起来像这样:
const finishedJSON = {
FormId: 0,
Company: "",
CreatedBy: "",
CreatedWhen: "",
LastModified: "",
LastModifiedBy: "",
Payload: [
{
item: 1
},
{
item: 2
}
]
}
来自组件 A 的对象作为名为 metaData
在组件 B 中,我试图将对象数组添加到对象的 Payload
字段。
到目前为止,我试过这个但没有用:
export default function ComponentB({metaData}) {
...
const [finishedJSON, setFinishedJSON] = useState(metaData);
...
setFinishedJSON({
...finishedJSON,
Payload: PayloadDataFromComponentB
})
})
...
}
我试过使用它并且有效:
export default function ComponentB({metaData}) {
...
const [finishedJSON, setFinishedJSON] = useState(metaData);
...
setFinishedJSON( data => {
data.Payload = PayloadDataFromComponentB;
})
...
}
但是,我读到 here 这在 React 中是不好的做法。
我也尝试了文章中的 useImmer
解决方案,不幸的是它没有用新的 Payload
数据更新对象
有没有更好的方法来更新Payload
字段?我只想使用最佳实践。如果我不清楚,请告诉我。谢谢!
您可以创建一个具有所有属性的全新对象。它不会变异。它只是 returns 一个全新的对象。
setFinishedJSON((data) => {
return {
...data,
payload: [ ...PayloadDataFromComponentB ]
}
});