【发布时间】:2020-06-17 16:16:40
【问题描述】:
在这个 React 组件中,我尝试从 GIPHY API 获取数据并将其呈现在另一个组件中。提取工作正常,但this.state.gifs.map 返回错误,因为它在提取完成和状态设置之前运行。我曾尝试将 Hooks 与 async/await 一起使用,但这似乎也不起作用。如何在设置状态后创建我的gifArray,这样我就不会尝试在空数组上运行.map。
import React, {Component} from 'react'
import GifCard from './gifCard.js'
import './App.css'
export default class GifContainer extends Component{
state = {
gifs: []
}
componentDidMount(){
fetch('http://api.giphy.com/v1/gifs/search?q=ryan+gosling&api_key=KnzVMdxReB873Hngy23QGKAJh6WtUnmz&limit=5')
.then(res => res.json())
.then(gifs => {
this.setState({gifs})
})
}
render(){
const gifArray = this.state.gifs.map((gif) => {
return <GifCard key={gif.name} gif={gif}/>
})
return(
<div>
<h1 id="heading">Gif Search</h1>
<div id='gifContainer'>
{gifArray}
</div>
</div>
)}
}
【问题讨论】:
-
你不要等到提取完成后再渲染,同时渲染一些加载指示器,或者如果你不关心用户体验,你可以
return null;如果提取没有还没完呢您可以将获取的状态存储在状态中
标签: javascript reactjs fetch giphy giphy-api