useEffect
useEffect가 필요한 이유
- top level에서 API 호출 → useState 업데이트 → 리랜더링 → 함수 자체 다시 호출 → API 호출 → useState → 반복 (useState에 의한 리랜더링은 값이 아닌, 메모리 비교로 리랜더링을 진행하기 때문) → 무한반복 -> useEffect를 사용하길 권장
useEffect
- useState → render → commit → paint(화면에 나타나고) → useEffect 가 실행됨. (랜더 이후 시작되기 때문에 작동하는게 늦다는 단점이 있음)
- 그래서 [useEffect A → useEffect B → useEffect C] 의 폭포수 코드를 쓰면→ 3번의 리랜더링 → 성능 저하 → useState으로 해결 할 수 있다면, useEffect를 쓰지말자.
- 코드 상 useEffect 와 functionA가 있다면, 동기적인 A부터 실행, useEffect끼리는 순서대로 진행
- cleanUp function : 리랜더링 전, 언마운트 전에 호출됨 (맨 처음엔 호출 안함)
- 개발자 모드 엄격모드에서는 useEffect가 마운트, 언마운트까지 한 번씩 총 두번 발생 → 버그 찾기 위함
- 두 번 발생 신경쓰지 말기 → cleanUp 함수에 집중 (unmount되면 clean up 호출 == dispose)
- useEffect 안에 함수를 사용하는 경우
- 되도록이면 useEffect 안에 써서 종속성이 필요없도록 사용
- 여러 군대 사용해서 UseEffect 밖에 함수가 있다면 useCallback을 쓰기 (메모리 최적화)
- useState, useReducer로 처리할 수 있다면, useEffect를 남용하지 말자.
- API호출은 useEffect보다는 React Query를 사용하자.
- 종속성에 객체, 배열이 들어간다면 무한 로딩이 생길 가능성 높음 (매 새로운 참조 객체를 반환하므로)
- 최적화를 위해 useCallback, useMemo로 처리할 수 있지만 비용이 비싸므로, 다르게 처리하도록 노력하자.
'React > know' 카테고리의 다른 글
Render Props 패턴 (0) | 2024.11.20 |
---|---|
성능 최적화 : React Dev Tool, React.lazy (2) | 2024.11.19 |
useRef 알아보기 (0) | 2024.11.17 |
useState에 대해 정리해보기 (1) | 2024.11.15 |
최적화를 위해 필요한 기능 memo, useMemo, useCallback (1) | 2024.11.13 |