useEffect는 컴포넌트가 렌더링된 후 DOM이 업데이트 된 시점에 실행된다. 따라서 DOM요소에 직접 접근하거나 조작하기에 안전하다.

  1. 이벤트 리스너:

    javascript
    Copy
    useEffect(() => {
      const handleResize = () => {
    // 윈도우 크기 변경 처리
      };
      window.addEventListener('resize', handleResize);
      return () => window.removeEventListener('resize', handleResize);
    }, []);
    
    
  2. DOM 측정:

    javascript
    Copy
    useEffect(() => {
      const element = ref.current;
      const rect = element.getBoundingClientRect();
    // rect 정보 활용
    }, []);
    
    
  3. 포커스 관리:

    javascript
    Copy
    useEffect(() => {
      inputRef.current.focus();
    }, []);
    
    
  4. 외부 라이브러리 통합:

  5. 조건부 DOM 업데이트:

    javascript
    Copy
    useEffect(() => {
      if (condition) {
    // DOM 업데이트 로직
      }
    }, [condition]);
    
    
  6. 애니메이션:

  7. 스크롤 위치 관리:

  8. 클린업:

useEffect를 사용할 때는 항상 의존성 배열을 적절히 관리하고, 필요한 경우 클린업 함수를 제공하여 메모리 누수를 방지하는 것이 중요합니다.

<aside> ❗ useLayoutEffect vs useEffect

</aside>


  1. 클린업 함수의 필요성:
  2. 주요 사용 사례와 예시: a. 이벤트 리스너 제거:

b. 타이머 정리:

c. 웹소켓 연결 종료:

d. 외부 라이브러리 인스턴스 정리:

e. 비동기 작업 취소:

f. DOM 변경 되돌리기:

```jsx
javascript
Copy
useEffect(() => {
  const handleScroll = () => {
// 스크롤 처리 로직
  };
  window.addEventListener('scroll', handleScroll);
  return () => window.removeEventListener('scroll', handleScroll);
}, []);

```

```jsx
javascript
Copy
useEffect(() => {
  const timer = setInterval(() => {
// 정기적인 작업 수행
  }, 1000);
  return () => clearInterval(timer);
}, []);

```

```jsx
javascript
Copy
useEffect(() => {
  const socket = new WebSocket('ws://example.com');
// 웹소켓 설정 로직
  return () => socket.close();
}, []);

```

```jsx
javascript
Copy
useEffect(() => {
  const chart = new Chart(ctx, config);
  return () => chart.destroy();
}, []);

```

```jsx
javascript
Copy
useEffect(() => {
  let isCancelled = false;
  const fetchData = async () => {
    const result = await api.getData();
    if (!isCancelled) {
// 데이터 처리
    }
  };
  fetchData();
  return () => { isCancelled = true; };
}, []);

```

```jsx
javascript
Copy
useEffect(() => {
  document.body.style.overflow = 'hidden';
  return () => { document.body.style.overflow = ''; };
}, []);

```
  1. 클린업 함수가 호출되는 시점:
  2. 주의사항: