【发布时间】:2020-05-11 01:05:56
【问题描述】:
我正在使用 useState ,它有 2 个数组 imageList 和 videoList ,然后在 useEffect 钩子中我在数据上使用 forEach 然后如果类型是 image 然后将 item 推送到 image 。 但最后我没有得到数组的图像列表或视频列表。
const [list, setDataType] = useState({imageList:[], videoList:[] });
useEffect (()=>{
//data is list of array
dataList.forEach(item =>{
if(!item.images) {
setDataType({...list, imageList:item})
}
else if (item.images[0].type === "video/mp4")
{
setDataType({...list, videoList :item})
}
else if((item.images[0].type === "images/gpeg")
{
setDataType({...list, imageList:item})
}
})
},);
这里的类型检查工作正常,但最后我得到了最后一次获取的数据,它可以是 videolist 或 imageList 最后我应该得到所有类型为图像的图像列表和类型为视频的相同视频列表
【问题讨论】:
-
不要在循环中不断调用
setState,建立你的状态然后设置它。 -
是的,您可以提取两个不同数组中的所有图像和视频,然后调用 setState 将其持久化。在循环中调用 setState 并不是一个有效的解决方案
标签: javascript reactjs ecmascript-6 react-hooks