온에듀링크

안녕하세요! 프론트엔드 개발을 막 시작한 ‘리액트초보’입니다.

개인 프로젝트로 게시판 목록 페이지를 만들고 있는데, 해당 페이지에만 들어가면 브라우저가 느려지다가 결국 뻗어버리는 현상이 발생해서 답답한 마음에 질문을 남깁니다.

발생한 문제 (무한 루프)

컴포넌트가 화면에 렌더링될 때 서버에서 게시글 데이터를 가져오기 위해 useEffect 훅을 사용했습니다. 그런데 크롬 개발자 도구의 네트워크(Network) 탭을 확인해보니, API 요청이 쉬지 않고 수백 번씩 날아가고 있었습니다.

“콘솔 창에 특별한 에러 메시지도 안 뜨고, 결국 메모리 초과로 브라우저 탭이 강제로 종료됩니다.”

작성한 코드

제가 작성한 데이터 페칭(Data Fetching) 부분의 코드는 아래와 같습니다.

const [posts, setPosts] = useState([]);

useEffect(() => {
    const fetchPosts = async () => {
        try {
            const response = await axios.get('/api/posts');
            // 여기서 상태를 업데이트합니다
            setPosts(response.data); 
        } catch (error) {
            console.error("데이터를 불러오는데 실패했습니다.", error);
        }
    };

    fetchPosts();
}); // <-- 제 생각엔 이 부분 의존성 배열 문제인 것 같습니다
        

궁금한 점 (도움 요청)

구글링을 해보니 의존성 배열(Dependency Array)을 비워두면 무한 루프에 빠질 수 있다고 합니다. 하지만 막상 코드 끝에 [] (빈 배열)을 넣으면 ‘React Hook useEffect has a missing dependency’라는 ESLint 노란색 경고줄이 뜹니다.

이런 경고를 무시하고 그냥 빈 배열을 넣는 것이 맞는 방법인지, 아니면 제가 상태 관리를 근본적으로 잘못하고 있는 것인지 잘 모르겠습니다.

  • 무한 루프가 발생하는 정확한 원인이 무엇인가요?
  • 데이터를 처음 렌더링될 때 딱 한 번만 불러오려면 코드를 어떻게 수정해야 할까요?

선배 개발자님들의 귀중한 조언을 부탁드립니다. 감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


언어 선택 / Select Language