[React/Hooks] useEffect로 값을 변경할 때 무한루프가 발생하는 이유와 useEffect

2025. 8. 11. 14:29·🖥️ Front-End/React

 

useEffect를 사용해서 state값을 변경했더니 무한반복이 발생해요 ㅜㅜ

 

 

useEffect가 뭔지 먼저 알고가보자

 

useEffect는 컴포넌트 마운트 이후 외부 효과(Effect)를 동기화하기 위한 훅임(ex. 데이터 패칭, api 호출, 채팅방 연결...)

useEffect(() => {setup func}, [deps])

 

setup 함수와 의존성 배열로 이루어져 있으며

의존성 배열의 값이 변경되면 useEffect의 콜백함수가 실행된다

 

무한 반복이 발생한다?

혹시 의존성 배열에 state 값을 넣지 않았나 확인해보자

const [count, setCount] = useState(0);

useEffect(() => {
	setCount(count + 1);
}

, [count]);

 

마운트 이후 state값이 변경되며 컴포넌트가 리렌더링 되고,

다시 useEffect가 실행되면서 state값을 변경시켜 무한 반복이 발생하는 것임

 

위의 코드는 setter 함수를 수정해서 문제를 해결할 수 있음

useEffect(() => {
	setCount(c => c + 1);
}

, [])

useState set함수에 업데이터를 사용하여 count를 의존성에서 제거해주면 됨

 


의존성 배열에 자꾸 빨간줄이 생겨요 ㅜㅜ

 

내가 프로젝트 진행중 채팅방을 만들 때 마주했던 오류였는데, roomId가 바뀔 때마다 useEffect를 실행시키고 싶었음

커넥트 함수에는 요청을 보낼 url이 포함되어 있었는데 이걸 컴포넌트 밖으로 빼냈어야 했다

(그 때는 이유를 몰라서 그냥 빨간줄 뜨는 채로 진행했음)

 

useEffect 안에 선언된 반응형 변수들은 "반드시" 의존성 배열에 추가 되어야 함

공식 문서에서도 의존성을 "선택"할 수 없다고 강조하고 있음

 

리액트의 린터는 반응형으로 변할 수 있는 변수가 useEffect 안에 선언되어 있지만, 의존성 배열에 존재하지 않는다면 오류를 발생시킴

이거 바뀌는 변수잖아

 

린터에게 이 변수가 바뀌지 않을 것이라는 걸 이해시켜 줘야함

바뀌지 않을 상수라면 컴포넌트 밖으로 꺼내거나 값을 직접 입력해서 상수로 사용해주자

 

 

'🖥️ Front-End > React' 카테고리의 다른 글

[React/Hooks] 불필요한 리렌더링 방지하는 방법과 useCallback  (1) 2025.08.12
[React/Hooks] 리액트가 상태변경을 감지하는 방법과 useState  (4) 2025.08.08
[JS/React-Query] 1. useQuery  (0) 2025.02.27
[JS/React-Query] 0. QueryClient  (2) 2025.02.02
[JS/Zustand] 1. Zustand 주요 함수 정리  (0) 2025.01.18
'🖥️ Front-End/React' 카테고리의 다른 글
  • [React/Hooks] 불필요한 리렌더링 방지하는 방법과 useCallback
  • [React/Hooks] 리액트가 상태변경을 감지하는 방법과 useState
  • [JS/React-Query] 1. useQuery
  • [JS/React-Query] 0. QueryClient
dush
dush
흑인 음악 A&R에서 FE 개발자까지 / Front-End Dev. Since 2024.07
  • dush
    Dushtify
    dush
  • 전체
    오늘
    어제
    • 분류 전체보기 (18)
      • ✏️ Personal (4)
        • SSAFY (3)
        • 취업 (1)
        • TIL (0)
      • 🖥️ Front-End (8)
        • JavaScript (1)
        • React (6)
      • 💽 CS Knowledge (6)
        • 🌐 Network (5)
        • 💻 CS (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AICT
    CS
    싸피
    혼자공부하는네트워크
    SK AX
    frontend
    폰트깨짐
    엘지유플러스유레카프론트엔드
    react
    프론트엔드
    네트워크
    javascript
    SKAX
    SSAFY
    Fe
    우수프로젝트
    멀티캠퍼스IT부트캠프
    tanstack-query
    2학기공통프로젝트
    삼성청년소프트웨어아카데미
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
dush
[React/Hooks] useEffect로 값을 변경할 때 무한루프가 발생하는 이유와 useEffect
상단으로

티스토리툴바