map中的setState只保存最后一个循环的state
setState in the map only the last loop is stored in the state
我正在尝试使用 map 循环中的 setState 将 object 保存到状态中,但我只获取状态中存储的最后数据.我的代码是这样的:
acceptedFiles.map((fileImg) => {
setImages([
...images,
{
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg,
},
]);
});
例如,假设“acceptedFiles”有5条数据,那么只有最后输入或存储在状态图像中的数据。
之前在Whosebug上根据我的问题标题进行搜索,所以写下了这个问题。
对于我的问题的所有建议,我提前感谢你。
images
每次循环都是一样的,所以你一直从头开始并添加一个图像。无论您最后执行哪个 setState,都会坚持下去。如果您必须重复调用 setImages,请确保始终从最新状态开始,方法是执行 set state 的函数版本:
acceptedFiles.forEach((fileImg) => {
setImages(prev => [
...prev,
{
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg
},
]
})
但是,对于您的情况,为什么不只设置一次状态?
const newFiles = acceptedFiles.map((fileImg) => ({
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg,
});
setImages(prev => [
...prev,
...newImages,
]);
我正在尝试使用 map 循环中的 setState 将 object 保存到状态中,但我只获取状态中存储的最后数据.我的代码是这样的:
acceptedFiles.map((fileImg) => {
setImages([
...images,
{
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg,
},
]);
});
例如,假设“acceptedFiles”有5条数据,那么只有最后输入或存储在状态图像中的数据。
之前在Whosebug上根据我的问题标题进行搜索,所以写下了这个问题。
对于我的问题的所有建议,我提前感谢你。
images
每次循环都是一样的,所以你一直从头开始并添加一个图像。无论您最后执行哪个 setState,都会坚持下去。如果您必须重复调用 setImages,请确保始终从最新状态开始,方法是执行 set state 的函数版本:
acceptedFiles.forEach((fileImg) => {
setImages(prev => [
...prev,
{
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg
},
]
})
但是,对于您的情况,为什么不只设置一次状态?
const newFiles = acceptedFiles.map((fileImg) => ({
rand_id: Math.floor(Math.random() * 1000 + 1),
image_file: fileImg,
});
setImages(prev => [
...prev,
...newImages,
]);