Javascript useState react挂钩不设置数组状态
我正试图将视频状态设置为api响应的items数组,但当我将console.log视频记录在日志中时,它返回一个空数组。。。。 下面是获取api的代码,我在其中设置了视频状态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
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键?依我看,这并不重要,因为它使用的是同一个进程是我想说的