작성
·
637
1
실행 자체는 잘 되고 이미지도 잘 불러와지는데 콘솔을 보면 GET https://image.tmdb.org/t/p/original/undefined 에러가 뜹니다. 한번씩 GET https://image.tmdb.org/t/p/original/null 도 같이 나오고요.
왜 발생하는지 모르겠어요. 무시해도 되는 걸까요?
Row.js입니다
import React, { useEffect, useState } from 'react'
import axios from "../api/axios";
import "./Row.css";
function Row({title, fetchUrl, id, isLargeRow}) {
const [movies, setMovies] = useState([]);
const fetchMovieData = async() => {
const request = await axios.get(fetchUrl)
setMovies(request.data.results);
}
useEffect(()=>{
fetchMovieData();
}, [])
return (
<section className="row">
<h2>{title}</h2>
<div className="slider">
<div className="slider__arrow-left">
<span className="arrow">{"<"}</span>
</div>
<div id={id} className="row__posters">
{movies.map((movie)=>
(
<img
key={movie.id}
className={`row__poster ${isLargeRow && "row__posterLarge"}`}
src={`https://image.tmdb.org/t/p/original/${
isLargeRow ? movie.poster_path : movie.backdrop_path
} `}
loading="lazy"
alt = {movie.name}
/>
))}
</div>
<div className="slider__arrow-right">
<span className="arrow">{">"}</span>
</div>
</div>
</section>
)
}
export default Row
답변 2
2
리액트의 실행순서에 의해 위와 같은 에러가 나오는 것입니다
1. 리액트는 렌더링되는 부분이 먼저 실행됩니다
movies state에 언제 값이 들어갈까요?
useEffect에서 fetchMovieData()를 실행할때겠죠?
하지만 리액트는 렌더링을 먼저 하기에 렌더링을 할때에는 movie안에는 아무 값도 없습니다 그래서 null이 나오는 것입니다
렌더를 다하고 useEffect()가 실행이 되어 movie가 set이 되어 다시 한번더 렌더를 하면 이때 결과물이 제대로 나옵니다
추가로 저도 위와 비슷한 질문을 했었는데 john 티처께서 자세하게 답 달아주셨습니다
https://www.inflearn.com/questions/598845
0
Got same issue any defence code