useEffect가 뭘까?

솜주먹·2022년 10월 11일
0

항해99

목록 보기
7/37
post-thumbnail

📖 useEffect

💬 정의

  • 컴포넌트가 렌더링이 진행된 후 특정 작업을 실행할 수 있도록 하는 hook
  • 의존성 배열을 넣으면 배열의 값이 변동 될 때도 실행된다

💬 실행 순서

  • 가정사항 : App > OuterBox > InnerBox
function App() {
  useEffect(() => {
    console.log(1);
  }, []);
  return (
    <div className="App">
      <h1>useEffect 순서 테스트</h1>
      <OuterBox />
    </div>
  );
}

const OuterBox = () => {
  useEffect(() => {
    console.log(2);
  }, []);
  return (
    <>
      <h2>Outer BOX</h2>
      <InnerBox />
    </>
  );
};

const InnerBox = () => {
useEffect(() => {
    console.log(3);
  }, []);
  return <h2>Inner Box</h2>
};
  • 콘솔 출력 순서 : 3 > 2 > 1
  • 사유 : App이 렌더링 되기 위해서는 OuterBox가 렌더링 되어야하고
    OuterBox가 렌더링 되기 위해서는 InnerBox가 렌더링 되어야하기에 당연함

💬 예외 순서

  • React v18부터 지원하는 Suspense 기능을 이용하면 예외를 만들 수 있다
  • 가정사항 : App > OuterBox > InnerBox
function App() {
  useEffect(() => {
    console.log(1);
  }, []);
  return (
    <div className="App">
      <h1>useEffect 순서 테스트</h1>
      <OuterBox />
    </div>
  );
}

const OuterBox = () => {
  useEffect(() => {
    console.log(2);
  }, []);
  return (
    <>
      <h2>Outer BOX</h2>
      <Suspense fallback={<div>...loading</div>}>
      	<InnerBox />
      </Suspense>
    </>
  );
};

const InnerBox = () => {
const asyncResult = axios.get(URL)

useEffect(() => {
    console.log(3);
  }, []);
  return <h2>Inner Box</h2>
};
  • 콘솔 출력 순서 : 2 > 1 > 3
  • 사유 : OuterBox까지 렌더링이 된 이후 InnerBox는 Suspense에 의해 비동기 통신이
    완료될 때 까지 interrupt을 당하기 때문에 가장 나중에 3출력된다

💡 답변

useEffect의 실행 순서에 대해 설명해주세요

useEffect는 기본적으로 컴포넌트가 렌더링된 후에 실행됩니다.
App 컴포넌트 안에 Outer 컴포넌트가 있고 Outer안에 Inner라는 컴포넌트가 있다고하면
Inner의 useEffect부터 실행되며 그 다음으로 Outer, App 순으로 useEffect가
실행됩니다. 예외적으로 컴포넌트에 있는 비동기 통신을 제어하기위해 React v18부터
정식 지원하는 Suspense를 사용하면 Suspense안에 있는 컴포넌트의 useEffect가
가장 나중에 실행됩니다.

0개의 댓글