lifecycle effects

라이프사이클: commit 이후 외부 시스템 동기화

함수형 컴포넌트에서는 mount, dependency update, unmount를 useEffect의 deps 비교와 cleanup 함수로 표현한다.

mount

commit 후 연결

구독, 데이터 요청, 타이머 등록처럼 DOM commit 뒤 외부 시스템을 여는 일을 배치한다.

[] deps · StrictMode 재실행 한계
update

deps Object.is 비교

props나 state 중 외부 동기화에 읽히는 값만 deps에 넣어 stale closure를 막는다.

tracked deps · exhaustive-deps
render

commit마다 effect

deps 배열을 생략하면 모든 commit 뒤 실행되므로 setState 루프와 불필요한 재구독을 확인한다.

deps 없음 · 루프 위험
cleanup

이전 effect teardown

다음 effect 실행 전과 unmount 때 구독 해제, 타이머 제거, 요청 취소를 수행한다.

return cleanup · AbortController
test

remount 시나리오

mount, deps 변경, unmount를 재현해 중복 listener와 늦은 response가 남지 않는지 확인한다.

act + cleanup assertion