Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
153
rated 0 times [  156] [ 3]  / answers: 1 / hits: 13275  / 4 Years ago, thu, march 5, 2020, 12:00:00

In this React component, I'm trying to fetch data from the GIPHY API and render it in another component. The fetch is working correctly, but this.state.gifs.map returns an error because it runs before the fetch is complete and the state is set. I have tried using Hooks with async/await but that did not seem to work either. How can I create my gifArray after the state is set so I'm not trying to run .map on an empty array.



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>

)}

}

More From » reactjs

 Answers
2

Your loading and state management is actually fine - running map on an empty array will not result in an error.



Your issue is actually with the data you are getting back. I checked the response of the URL you are using and it returns an object with the data and paging details like this:



{
data: [
// The gif array
],
pagination: {...},
meta: {...}
}


Using map on this object will give you an error. The gif array is in the data property which you should use - e.g. instead of:



this.setState({gifs})


You can use:



this.setState({gifs: gifs.data})

[#4568] Sunday, March 1, 2020, 4 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
harleyaleenag

Total Points: 678
Total Questions: 121
Total Answers: 105

Location: Papua New Guinea
Member since Thu, Jul 9, 2020
4 Years ago
harleyaleenag questions
Thu, May 5, 22, 00:00, 2 Years ago
Wed, Aug 19, 20, 00:00, 4 Years ago
Thu, Dec 26, 19, 00:00, 4 Years ago
;