Javascript Youtube数据Api V3,使用React js显示先前获取的结果

Javascript Youtube数据Api V3,使用React js显示先前获取的结果,javascript,reactjs,axios,youtube-api,react-hooks,Javascript,Reactjs,Axios,Youtube Api,React Hooks,我制作了一个youtube克隆,用户可以在其中搜索一个术语,youtube数据API将在react js中显示所需的结果,但每次我查询之前查询的数据时,都会显示出来。 当我记录“Post”即JSON数据时 **搜索查询组件* import React,{useEffect,useState} from 'react' import axios from 'axios' import Cards from './Cards' function SearchResu

我制作了一个youtube克隆,用户可以在其中搜索一个术语,youtube数据API将在react js中显示所需的结果,但每次我查询之前查询的数据时,都会显示出来。 当我记录“Post”即JSON数据时

**搜索查询组件*

    import React,{useEffect,useState} from 'react'
    import axios from 'axios'
    import Cards from './Cards'

    function SearchResults(props) {
        const query = props.match.params.query;
        const [posts, setPosts] = useState([])
        useEffect(() => {
            axios({
                "method": "GET",
                "url": 'https://www.googleapis.com/youtube/v3/search',
                "params":{
                    'part':'snippet',
                    'maxResults':'20',
                    'key':'[API_KEY]',
                    'q':query
                }
            })
                .then((res) => {
                    setPosts(res.data.items)               
                })
                .catch((error) => {
                    console.log(error)
                })
                console.log(posts); 
        },[query])

        return (
            <div>
                <Cards/>
            </div>
        )
    }

    export default SearchResults
import React,{useffect,useState}来自“React”
从“axios”导入axios
从“./Cards”导入卡片
功能搜索结果(道具){
const query=props.match.params.query;
const[posts,setPosts]=useState([])
useffect(()=>{
axios({
“方法”:“获取”,
“url”:https://www.googleapis.com/youtube/v3/search',
“参数”:{
“部分”:“片段”,
“maxResults”:“20”,
“密钥”:“API_密钥”,
“q”:查询
}
})
。然后((res)=>{
设置柱(res.data.items)
})
.catch((错误)=>{
console.log(错误)
})
控制台日志(posts);
},[查询])
返回(
)
}
导出默认搜索结果
您的
控制台.log(posts)
步骤发生的时间早于
设置posts(res.data.items)
步骤

要捕获
帖子的更改
我建议使用
useffect
hook作为:

useEffect(() => {
   console.log(posts); 
}, [posts]);
进一步阅读有关
useffect

您的
控制台日志(posts)
步骤发生的时间早于
设置posts(res.data.items)
步骤

要捕获
帖子的更改
我建议使用
useffect
hook作为:

useEffect(() => {
   console.log(posts); 
}, [posts]);

请进一步阅读您在useEffect钩子中添加[query]作为第二个参数的
useEffect
。这意味着在更改查询变量==>之前不会执行回调函数(useEffect方法的第一个参数)。我想您必须通过[posts]更改[query]

只需使用以下代码:

import React,{useEffect,useState} from 'react'
import axios from 'axios'
import Cards from './Cards'

function SearchResults(props) {
    const query = props.match.params.query;
    const [posts, setPosts] = useState([])
    useEffect(() => {
        axios({
            "method": "GET",
            "url": 'https://www.googleapis.com/youtube/v3/search',
            "params":{
                'part':'snippet',
                'maxResults':'20',
                'key':'[API_KEY]',
                'q':query
            }
        })
            .then((res) => {
                setPosts(res.data.items)               
            })
            .catch((error) => {
                console.log(error)
            })
            console.log(posts); 
    },[posts])

    return (
        <div>
            <Cards/>
        </div>
    )
}

export default SearchResults
import React,{useffect,useState}来自“React”
从“axios”导入axios
从“./Cards”导入卡片
功能搜索结果(道具){
const query=props.match.params.query;
const[posts,setPosts]=useState([])
useffect(()=>{
axios({
“方法”:“获取”,
“url”:https://www.googleapis.com/youtube/v3/search',
“参数”:{
“部分”:“片段”,
“maxResults”:“20”,
“密钥”:“API_密钥”,
“q”:查询
}
})
。然后((res)=>{
设置柱(res.data.items)
})
.catch((错误)=>{
console.log(错误)
})
控制台日志(posts);
},[员额])
返回(
)
}
导出默认搜索结果

在useEffect钩子中添加[query]作为第二个参数。这意味着回调函数(useEffect方法的第一个参数)将不会执行,直到查询变量更改==>我认为您必须通过[posts]更改[query]

只需使用以下代码:

import React,{useEffect,useState} from 'react'
import axios from 'axios'
import Cards from './Cards'

function SearchResults(props) {
    const query = props.match.params.query;
    const [posts, setPosts] = useState([])
    useEffect(() => {
        axios({
            "method": "GET",
            "url": 'https://www.googleapis.com/youtube/v3/search',
            "params":{
                'part':'snippet',
                'maxResults':'20',
                'key':'[API_KEY]',
                'q':query
            }
        })
            .then((res) => {
                setPosts(res.data.items)               
            })
            .catch((error) => {
                console.log(error)
            })
            console.log(posts); 
    },[posts])

    return (
        <div>
            <Cards/>
        </div>
    )
}

export default SearchResults
import React,{useffect,useState}来自“React”
从“axios”导入axios
从“./Cards”导入卡片
功能搜索结果(道具){
const query=props.match.params.query;
const[posts,setPosts]=useState([])
useffect(()=>{
axios({
“方法”:“获取”,
“url”:https://www.googleapis.com/youtube/v3/search',
“参数”:{
“部分”:“片段”,
“maxResults”:“20”,
“密钥”:“API_密钥”,
“q”:查询
}
})
。然后((res)=>{
设置柱(res.data.items)
})
.catch((错误)=>{
console.log(错误)
})
控制台日志(posts);
},[员额])
返回(
)
}
导出默认搜索结果