使用 Vimeo API 反应 useEffect 和迭代数组

Posted

技术标签:

【中文标题】使用 Vimeo API 反应 useEffect 和迭代数组【英文标题】:React useEffect and iterating over array using Vimeo API 【发布时间】:2019-10-09 01:41:12 【问题描述】:

我有一系列尝试使用 vimeo API 来抓取四个缩略图 jpg。我有一组视频 ID

const vimeo = [
    "325845565","325846054","325848270","325849439"
]

我正在使用 setState 来导入和使用数组

import vimeo;

const [data , setData ] = useState(vimeo)

我有一个单独的状态,我想在其中存储缩略图数据:

const [thumbNails, setThumbNails] = useState(
    data : []
)

我希望能够遍历 useEffect 钩子中的每个 vimeo id。我正在使用 axios 之类的东西:

useEffect(() => 
    const fetchData = async () => 
        data.map(videoID => 
            const result = await axios(`http://vimeo.com/api/v2/video/$data[0].json`);
            setThumbNails(
                data : result
            )
        
        )

    fetchData()
,[])

但是这段代码我得到了以下错误:

解析错误:不能在异步函数之外使用关键字 'await'

有什么想法吗?谢谢。

【问题讨论】:

解析器错误除外(您刚刚放错了async 声明,它应该在data.map 回调而不是fetchData)您希望这段代码如何工作?目前它总是会覆盖您获取的最后一个缩略图。此外,在这种情况下,result 将是 axios 响应,我想你会想要 data: result.data... 【参考方案1】:

看看this answer 和what I found on google

您需要使用Promise.all,然后使用setState 并返回数组

const fetchData = async () => 
    let fetchedResult = await Promise.all(data.map(videoID => 
        axios(`http://vimeo.com/api/v2/video/$data[0].json`)
    ))
    fetchedResult.map(data => setThumbNails(
            data : result
        ))

【讨论】:

虽然这在语法上是正确的,但地图代码通常看起来都是错误的。 @James 为什么是the map code in general looks all wrong?我复制了您的代码并添加了正确的async @Vencovksy 我不是 OP(同名)。 @James 你抓到我了哈哈哈 谢谢,但我不认为我可以在地图函数中使用 await 作为参数顺便说一句我是 OP :)

以上是关于使用 Vimeo API 反应 useEffect 和迭代数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在useEffect钩子反应中停止内存泄漏

反应 useEffect 和 setInterval

有没有办法在 useEffect 的反应组件中设置 xstate 机器的状态?

如何在 React 中使用 useEffect 挂钩调用多个不同的 api

act 和 useState 的单元测试错误,在 useEffect 中进行 API 调用

深度反应useEffect / useEffect的使用?