본문 바로가기
Frontend/React

[React] useEffect (parameter, clean-up)

by jojo 2022. 1. 19.

 

 

 

▷ useEffect parameter 유무에 따른 차이

#1 두번째 인자(dependency)가 없는 경우 

function App() {
  const [isOn, setIsOn] = useState(false);

  useEffect(() => {
   fetch('http://example.com')
     .then(res => console.log(res))
  });
}

: useEffect에 인자를 넣지 않고 생략하면 state가 바뀔때마다(DOM이 변화할때마다) 무조건적으로 해당 effect를 실행

 

 

#2 두번째 인자가 빈 배열([])인 경우

function App() {
  const [isOn, setIsOn] = useState(false);

  useEffect(() => {
   fetch('http://example.com')
     .then(res => console.log(res))
  }, []);
}

: 리액트 컴포넌트가 처음 호출될 때 실행

(+ unmount 상태가 된다면 claen-up 코드가 실행)

 

 

#3 두번째 인자가 특정 state인 경우

function App() {
  const [isOn, setIsOn] = useState(false);

  useEffect(() => {
   fetch('http://example.com')
     .then(res => console.log(res))
  }, [isOn]); // isOn state가 변경될 때마다 실행됨
}

: 리액트 컴포넌트가 처음 호출될 때 실행되고, state가 변경될 때마다 실행됨

 

 

 

▷ clean-up

- 메모리 누수가 발생하지 않도록 정리하는 작업

- 함수형 컴포넌트에서는 함수를 return 하는 것으로 구현

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);
    };
  });

 

 

 

[Reference]

1. useEffect parameter :https://stackoverflow.com/questions/55240526/useeffect-second-argument-variations-in-react-hook

2. useEffect 공식문서 : https://ko.reactjs.org/docs/hooks-effect.html

'Frontend > React' 카테고리의 다른 글

[React] useReducer  (0) 2022.01.19

댓글