[React] useEffect

YJ·2023년 2월 27일
0

1. Side Effect

: 부수효과. 의도하지 않은 다른 동작

  • 함수 내에서 모든 동작이 이루어지는 경우 => side effect 없다
  • 함수 밖에서 값을 가져오는 경우 => side effect 있다
  • console.log : 대표적인 side effect 중 하나 (외부의 method를 가져와 사용하기 때문)

2. useEffect

  • useEffect(( ) => { }, [ ])
    • 콜백 함수: 특정한 side effect 수행
    • 의존성 배열: 실행시킬 타이밍
  • useEffect 안의 함수는 랜더링 후 실행된다. ➡️ side effect가 랜더링 blocking 하는 문제 해결
  • 의존성 배열이 비어있으면 최초 랜더링시에만 side effect 실행되고 그 다음부터는 실행되지 않는다. ➡️ 매 랜더링마다 side effect 실행되는 문제 해결 ( ex) Data Fetching 을 최초 한 번만 실행하면 될 경우에는 빈 배열 넘겨주어 최초 한 번만 data 가져오는 side effect 발생)

✏️ 전체 과정

  1. 컴포넌트 랜더링 (최초 랜더링: mount)
  2. callback 함수 호출 (side effect)
  3. state or props 변경 ➡️ 리랜더링 (update)
  4. 의존성 배열 확인
  • 의존성 배열이 존재하지 않거나, 배열의 요소 중 하나라도 변경됐을 경우 ➡️ callback 함수 호출 (side effect)
  • 의존성 배열의 변경이 없을 경우 ➡️ callback 함수 호출하지 않음
  • state or props 변경 시 3-4번 반복
  1. 컴포넌트 불필요시 화면에서 사라짐 (unmount)

❗️ state의 변화는 해당 컴포넌트에만 영향을 미친다. (해당 컴포넌트만 다시 랜더링이 일어남) ➡️ 자식 컴포넌트에서 변화가 일어나면 자식 컴포넌트만 리랜더링 되고, 부모 컴포넌트에서 변화가 일어나면 부모, 자식 컴포넌트 모두 리랜더링 된다.

3. Clean up Effect

: side effect 가 지속적으로 남아있는 경우

  • useEffect 에 전달한 callback 함수에서 clean up 함수 리턴
  • 다음 side effect 발생시키기 전 / 컴포넌트 unmount 될 때 clean up 함수 호출한다.
profile
Hello

0개의 댓글