I'm getting the error "Cannot read property 'map' of undefined" but can't work out why - map will not work because 'movies' is undefined. Can you see what I'm doing wrong? Many thanks.
const Dashboard = () => {
const discoverUrl = 'https://movied.herokuapp.com/discover';
const [movieList, setMovies] = useState({ movies: [] });
useEffect(() => {
const getAllMovies = () => {
fetch(discoverUrl)
.then(response => response.json())
.then(data => setMovies(data))
}
getAllMovies()
}, [])
return (
<ul>
{movieList.movies.map(movie => (
<li>
<p>{movie}</p>
</li>
))}
</ul>
);
}
export default Dashboard```
TypeError: Cannot read property 'map' of undefined
The "Cannot read property 'props' of undefined" error occurs when a class method is called without having the correct context bound to the this keyword. To solve the error, define the class method as an arrow function or use the bind method in the classes' constructor method.
React Hook "useEffect" is called conditionally. React Hooks must be called in the exact same order in every component render.
You response data mybe a list or undefined
you need to do like this:
setMovies(pre => ({
...pre,
movies: data || []
}))
When you set state which is setMovies(data), movieList will be equal to data. So you will lose movies property in movieList(there will be no movieList.movies).
So either initiate state like this
const [movieList, setMovies] = useState([]);
and do setMovies(data).
Or else set state like
setMovies({ movies: [...data] })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With