Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript useState react挂钩不设置数组状态_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript useState react挂钩不设置数组状态

Javascript useState react挂钩不设置数组状态,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我正试图将视频状态设置为api响应的items数组,但当我将console.log视频记录在日志中时,它返回一个空数组。。。。 下面是获取api的代码,我在其中设置了视频状态 const [videos, setVideos] = useState([]); const handleFormSubmit = async (searchterm) => { await fetch( `https://www.googleapis.com/youtube/v3/search

我正试图将视频状态设置为api响应的items数组,但当我将console.log视频记录在日志中时,它返回一个空数组。。。。 下面是获取api的代码,我在其中设置了视频状态

const [videos, setVideos] = useState([]);
const handleFormSubmit = async (searchterm) => {
    await fetch(
      `https://www.googleapis.com/youtube/v3/search?${params.toString()}&q=${searchterm}`
    )
      .then((response) => response.json())
      .then((data) => {
        console.log(data);
        setVideos(data.items);
        console.log(videos);
      });
  };

如何将项目数组设置为视频状态?

您使用的是
async/await
,因此应该是

const[videos,setVideos]=useState([])
const handleFormSubmit=async(searchterm)=>{
const response=等待获取(
`https://www.googleapis.com/youtube/v3/search?${params.toString()}&q=${searchterm}`
)
const data=wait response.json()
console.log(数据)
setVideos(data.items)
console.log(视频)
}

Ciao,不幸的是,在调用
setVideos
之后,使用hook无法记录
videos
,因为
setVideos
是异步的

要获取
视频
的最后一个值,您必须以以下方式使用
useffect
挂钩:

useEffect(() => {
   console.log(videos);
}, [videos]);
太长,读不下去了 React Hooks异步工作
setState
->
呈现
->
状态绑定

答复 他就是这样工作的

  • 设定状态
  • 计划渲染组件(我是指状态更改组件)
  • 并使用更改的状态进行渲染
  • 因此,您无法在
    控制台访问视频。log(video)

    参考文献

  • setVideos
    不是同步操作,视频数组将在下次呈现功能组件时更改。您不能在调用
    setVideos
    后立即记录更新状态。您的状态正在更新,您的组件必须重新渲染才能看到更新的状态。另外,请确保您有一个
    catch
    块来捕获和处理请求过程中可能出现的任何错误。与您的问题无关,但请使用
    async wait
    语法或承诺链接,不要将两者混合使用。不,setVideos是异步的!!!你的解决方案根本不起作用!!!是的,我尝试这样做,但它仍然返回空数组!:(OP试图在调用
    setVideos
    后立即记录更新的状态,但这不起作用。在
    async
    函数中使用承诺链接不是问题所在。@premkulkarni您是否为请求添加了API键?依我看,这并不重要,因为它使用的是同一个进程是我想说的