在反应 useState 挂钩中将对象推送到数组
Push Object to array in react useState hook
我声明反应状态如下
const [selectedFiles, setselectedFiles] = useState([]);
在下面的函数中使用它们
function handleAcceptedFiles(files) {
files.map((file) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
formattedSize: formatBytes(file.size),
})
);
setselectedFiles(files);
}
我正在尝试添加如下但不起作用
selectedFiles.length === 0 ? setselectedFiles(files) : setselectedFiles(oldFiles => [...oldFiles,files])
但这对我没有帮助。
您可能 setselectedFiles
对之前的数组有相同的引用,这不会导致任何更改,因此将其克隆到一个新数组(我通过传播进行克隆)
function handleAcceptedFiles(files) {
files.map((file) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
formattedSize: formatBytes(file.size),
})
)
setselectedFiles([...files])
}
你在做
setselectedFiles(oldFiles => [...oldFiles,files])
这会将数组作为新元素添加到现有数组
像这样
let array = [1,2,3];
let array2 = [4,5,6];
let output= [...array,array2]
console.log(output) // [1,2,3,[4,5,6]]
// change the output which concat 2 arrays using spread
output= [...array,...array2];
console.log(output) // [1,2,3,4,5,6]
所以对于你的解决方案
替换
setselectedFiles(oldFiles => [...oldFiles,files])
来自
setselectedFiles(oldFiles => [...oldFiles,...files])
我声明反应状态如下
const [selectedFiles, setselectedFiles] = useState([]);
在下面的函数中使用它们
function handleAcceptedFiles(files) {
files.map((file) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
formattedSize: formatBytes(file.size),
})
);
setselectedFiles(files);
}
我正在尝试添加如下但不起作用
selectedFiles.length === 0 ? setselectedFiles(files) : setselectedFiles(oldFiles => [...oldFiles,files])
但这对我没有帮助。
您可能 setselectedFiles
对之前的数组有相同的引用,这不会导致任何更改,因此将其克隆到一个新数组(我通过传播进行克隆)
function handleAcceptedFiles(files) {
files.map((file) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
formattedSize: formatBytes(file.size),
})
)
setselectedFiles([...files])
}
你在做
setselectedFiles(oldFiles => [...oldFiles,files])
这会将数组作为新元素添加到现有数组 像这样
let array = [1,2,3];
let array2 = [4,5,6];
let output= [...array,array2]
console.log(output) // [1,2,3,[4,5,6]]
// change the output which concat 2 arrays using spread
output= [...array,...array2];
console.log(output) // [1,2,3,4,5,6]
所以对于你的解决方案 替换
setselectedFiles(oldFiles => [...oldFiles,files])
来自
setselectedFiles(oldFiles => [...oldFiles,...files])