useEffect 와 useCallback 방지, 무한루프
작성자 : 조회수 :
왜 루프가 생기는가?

inc가 의존성이어서 매 렌더 후 effect가 다시 돈다.
- effect 안에서
setN → 또 리렌더 → 또 새로운 inc → 또 effect… 무한 루프 조건 성립.
무한루프 막는법
1) useCallback으로 함수 참조를 고정

[] 덕분에 inc 참조는 고정.
- 내부에서
n을 직접 읽지 않고 setN(v => v + 1)처럼 함수형 업데이트를 쓰면 stale 클로저 문제를 피하면서도 의존성을 비울 수 있다.
- 포인트:
useCallback은 “참조 안정화”가 목적이다. 리렌더를 막지 않는다. 다만 “참조 비교”가 중요한 상황(자식에게 prop으로 넘길 때 React.memo와 함께, 혹은 effect 의존성에 있을 때)에서 이득이 있다.
2) 함수 본문을 아예 effect 안으로 이동

- 바깥의 함수를 의존성으로 넣을 이유가 없어져서 루프 리스크가 사라진다.
3) 컴포넌트 밖(모듈 스코프)에 정의
- 그 함수가 props/state를 전혀 읽지 않는 순수 유틸이라면 컴포넌트 밖에 두면 참조가 고정된다.
4) useRef로 최신 함수를 보관하는 패턴
- 콜백 참조를 effect 의존성에서 빼고 싶지만 최신 구현을 쓰고 싶을 때:
