![](/img/trans.png)
[英]Update a single object property in an array of objects based on the current value with redux
[英]Update item in objects array based on object property
我有一個具有以下結構的對象數組,如何根據 object 屬性( name
)之一更新對象的數據( file
)? 例如,如何使用新file
object 更新名為test1
的 object?
我已經嘗試過了,但是正確的 object 沒有更新,而是將新的 object 推送到陣列中,我做錯了什么?
const [files, setFiles] = useState(fileArr)
const setFile = (name, data) => {
setFiles(files => ({...files, [name]: {...files[name], ...data}}))
}
fileArr
數組:
const fileArr= [
{
name: 'test1',
status: 'Required',
file: {}
},
{
name: 'test2',
status: 'Required',
file: {}
},
{
name: 'test3',
status: 'Required',
file: {}
}
]
假設以下結構
const fileArr= [
{
name: 'test1',
status: 'Required',
file: {}
},
{
name: 'test2',
status: 'Required',
file: {}
},
{
name: 'test3',
status: 'Required',
file: {}
}
]
根據name
更新 object 以替換file
的正確方法是
const onChange = (name, data) =>{
setItems(items => items.map(item =>{
if(item.name === name)
//assuming you want to spread instead of overwrite 'file'
return {...item, file:{...item.file, ...data}}
return item
}))
}
此外,您正在使用fileList
初始化您的 state ,基於您嘗試更新的方式是object
,但您將fileArr
發布為您的數據結構。 所以我假設你想在fileArr
而不是fileList
中執行你的操作(我不知道它的樣子)
我很確定這是因為您在 setFiles 中使用[name]
時沒有引用以前的files
。 我原以為以下應該有效。
const setFile = (name, data) => {
setFiles(files => ({...files, files[name]: {...files[name], ...data}}))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.