我有一个具有以下结构的对象数组,如何基于一个对象属性(file
)更新对象的数据(name
)?
例如如何使用新的test1
对象更新名为file
的对象?
我已经尝试过,但是没有更新正确的对象,而是将新对象推送到数组,我在做什么错呢?
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: {}
}
]
答案 0 :(得分:3)
假定以下结构
const fileArr= [
{
name: 'test1',
status: 'Required',
file: {}
},
{
name: 'test2',
status: 'Required',
file: {}
},
{
name: 'test3',
status: 'Required',
file: {}
}
]
基于name
更新对象以替换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
初始化状态,根据您尝试更新的方式,该状态是object
,但是您将fileArr
作为数据结构发布了。因此,我假设您想在fileArr
而非fileList
中执行操作(我不知道它的外观)