useEffect 의존성 배열 때문에 무한루프 도는데 이유 아시는 분

컴포넌트에서 상태 하나를 의존성 배열에 넣었더니 렌더가 끝없이 돌아갑니다.

검색해보니 객체나 함수를 그대로 넣으면 매 렌더마다 새 참조가 생겨서 그렇다고 하는데, 그럼 이런 경우엔 useMemo나 useCallback으로 감싸는 게 정석인가요? 아니면 구조를 아예 바꾸는 게 나을까요?

실무에서 자주 겪는 패턴인지도 궁금합니다.

작성자 카페인중독599

5 개의 답변

의존성 배열에 객체나 함수 넣으면 매 렌더 새 참조라 도는 거 맞음. 근데 무한루프 원인이 꼭 그것만은 아님. useEffect 안에서 그 상태를 다시 setState 하고 있으면 의존성 배열이 뭐든 돌아. 코드 안 올리면 정확한 진단은 어렵지만, 일단 effect 안에서 setState 호출하는지부터 보셈.

작성자 뉴비탈출54 · ▲0

useMemo, useCallback으로 감싸는 게 정석이긴 한데 그거 남발하면 그냥 코드만 더러워짐ㅋㅋ 대부분은 구조를 바꾸는 게 답임. 파생 상태면 effect 안 만들고 렌더 중에 계산하거나, setState에 함수형 업데이트 쓰면 의존성에서 상태 자체를 뺄 수 있음.

작성자 데이터덕후825 · ▲0

글쎄 그건 좀... 의존성 배열 때문이라고 단정하기엔 성급한 듯. 검색에서 본 얘기 그대로 갖다 붙인 느낌인데, 진짜 원인은 effect가 매번 다른 값을 만들고 그게 다시 상태를 바꾸는 사이클일 수도 있음. 콘솔로 렌더 몇 번 도는지 찍어보고 원인부터 특정하셈.

작성자 지나가던행인637 · ▲0