[React.js] Uncaught TypeError: Cannot read properties of undefined (reading 'map')

Lim WoojaeLim Woojae
1 min read

About Error

When I execute this react code,

<div id={id} className="row__posters">
  {movies.length > 0 ? (
    movies.map((movie) => {
      return (
        <SwiperSlide>
          <img
            key={movie.id}
            style={{ padding: "25px 0" }}
            className={`row__poster ${
            isLargeRow && "row__posterLarge"
            }`}
            src={`https://image.tmdb.org/t/p/original/${
            isLargeRow ? movie.poster_path : movie.backdrop_path
            }`}
            alt={movie.name || movie.title}
             onClick={() => handleClick(movie)}
          />
        </SwiperSlide>
      );
    })
  ) : (
    <p>No movies available.</p>
  )}
</div>

It results in TypeError.


Why?

It is because react.js is going to map through the movies when movies do not have any elements. In other words, movies is currently undefined.


Solution

  1. Initializing

    movies is undefined because the array might not be initialized. You can initialize it by using useState in react.

const [movies, setMovies] = useState([]); // initialize movies to []
  1. Optional chaining (?.)

    if movies is nullish (meaning null or undefined), the expression short circuits and evaluates to undefined instead of throwing an error.

     movies?.map((movie) => {
         // your code    
     }
    
  2. Logical AND (&&)

    Logical AND (&&) works similar to optional chaining (?.). Before mapping, we can check if movies is undefined by using && operator.

movies && movies.map((movie) => {
    // your code    
}
0
Subscribe to my newsletter

Read articles from Lim Woojae directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Lim Woojae
Lim Woojae

Computer Science Enthusiast with a Drive for Excellence | Web Development | Passionate About Tech & Innovation