<aside> 🔍 Effect hook을 사용하면 함수형 컴포넌트에서 Side Effect 를 수행할 수 있다.

</aside>

useEffect가 하는 일

useEffect를 이용하여 우리는 React에게 컴포넌트가 렌더링 수행을 완료한 뒤 어떤 일을 수행해야하는지 지정해줄 수 있다. React는 우리가 useEffect의 콜백으로 넘긴 함수를 기억했다가 DOM 업데이트를 수행한 이후에 호출한다.

useEffect를 컴포넌트 안에서 불러내는 이유

useEffect를 컴포넌트 내부에 둠으로써 effect를 통해 컴포넌트의 state 혹은 props에 접근할 수 있다. 함수 범위 안에 존재하기 때문에 특별한 API 없이도 값을 얻을 수 있다.

useEffect의 clean-up

import React, { useState, useEffect } from 'react';

function FriendStatus(props) {
  const [isOnline, setIsOnline] = useState(null);

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }
    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
    // effect 이후에 어떻게 정리(clean-up)할 것인지 표시합니다.
    return function cleanup() {
      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
    };
  });

  if (isOnline === null) {
    return 'Loading...';
  }
  return isOnline ? 'Online' : 'Offline';
}

Effect를 건너뛰어 성능 최적화하기

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // count가 바뀔 때만 effect를 재실행합니다.