首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图通过对youtube的api调用将4个视频呈现给我的应用程序

试图通过对youtube的api调用将4个视频呈现给我的应用程序
EN

Stack Overflow用户
提问于 2020-06-27 23:35:02
回答 2查看 39关注 0票数 1
代码语言:javascript
复制
import React, { useState, useEffect } from 'react';

导入我的钩子

代码语言:javascript
复制
function useFetch(url, defaultResponse) {
    const [data, setData] = useState(defaultResponse);
    async function getDataFromAPI(url) {
        try {
            const res = await fetch(url);
            const data = await res.json();
            setData({
                isLoading: false,
                data
            })
        } catch (e) {
            console.log(e);
        }
    }
    useEffect(() => {
        getDataFromAPI(url);
    }, [url])
    return data;
}

创建了一个自定义钩子

代码语言:javascript
复制
export default function YouTubeData() {
    const channelID = "UCXgGY0wkgOzynnHvSEVmE3A";
    const APIKEY = "my-working-key";
    const results = 4
    const apiEndpoint = `https://www.googleapis.com/youtube/v3/search?key=${APIKEY}&channelId=${channelID}&part=snippet,id&order=date&&maxResults=${results}`
    const userFetchResponse = useFetch(apiEndpoint, { isLoading: true, data: null });
    if (!userFetchResponse.data || userFetchResponse.isLoading) {
        return 'Loading...'
    }

当我控制台日志userFetchResponse.data.items时,我得到一个带有属性的对象数组

代码语言:javascript
复制
    const {videoId} = (userFetchResponse.data.items.map(obj => "http://www.youtube.com/embed/" + obj.id.videoId));

    return (
        <div>

            {
                videoId.map((link, i) => {
                    var frame =
                        <div key={i} className='youtube'>
                            <iframe
                                title={i}
                                width="560"
                                height="315"
                                src={link}
                                frameBorder="0"
                                allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
                                allowFullScreen>
                            </iframe>
                        </div>
                    return frame
                })
            }
            {this.frame}
        </div>
    )
}

我正在尝试创建一个变量videoID来保存jsx src所需的4个URLs数组,但是我一直收到一个未定义的

错误。

EN

回答 2

Stack Overflow用户

发布于 2020-06-27 23:51:50

const {videoId} = (userFetchResponse.data.items.map(obj => "http://www.youtube.com/embed/" + obj.id.videoId));

右边是一个使用map的数组,左边也必须是一个数组。

代码语言:javascript
复制
  const videoId = arr[0]
  // or
  const [videoId] = arr

但不是{videoId,因为这将假设您的右手边有一个对象。

票数 0
EN

Stack Overflow用户

发布于 2020-06-27 23:55:15

当你做的时候

代码语言:javascript
复制
const {someVar} = something

是相同的

代码语言:javascript
复制
const someVar = something.someVar

在您的例子中,您只需要将数组存储到变量中,所以只需要

代码语言:javascript
复制
const videoIds = userFetchResponse.data.items.map(obj => "http://www.youtube.com/embed/" + obj.id.videoId);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62616643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档