Skip to content

useNavigate를 추가한 순간 리렌더 범위가 확장된 건에 대하여..

Soobeen Yoon edited this page Nov 24, 2022 · 6 revisions

문제를 직감하게 된 계기

스크린샷 2022-11-24 오후 10 42 01

🧐 리렌더 범위가 다른 것이 보이십니까

1번 코드

const Header = (): ReactElement => {
  const [login, setUserLogin] = useAtom(loginStateAtom);

  return (
    <Wrapper>
      <FlexGrow3>
        <Button context={<img src={LongLogo} />} />
      </FlexGrow3>
      {!login && (
        <Button
          context={<Text text={'Sign in'} fontFamily="roboto" />}
          onClick={() => setUserLogin(!login)}
          margin={'0 3vw 0 0'}
        />
      )}
      {!login && <Button context={<Text text={'Sign up'} fontFamily="roboto" />} />}
      {login && (
        <Button context={<Text text={'Sign out'} fontFamily="roboto" />} onClick={() => setUserLogin(!login)} />
      )}
    </Wrapper>
  );
};

2번 코드

const Header = (): ReactElement => {
  const [login, setUserLogin] = useAtom(loginStateAtom);
  const navigate = useNavigate();

  return (
    <Wrapper>
      <FlexGrow3>
        <Button context={<img src={LongLogo} />}/>
      </FlexGrow3>
      {!login && (
        <Button
          context={<Text text={'Sign in'} fontFamily="roboto" />}
          onClick={() => setUserLogin(!login)}
          margin={'0 3vw 0 0'}
        />
      )}
      {!login && <Button context={<Text text={'Sign up'} fontFamily="roboto" />} />}
      {login && (
        <Button context={<Text text={'Sign out'} fontFamily="roboto" />} onClick={() => setUserLogin(!login)} />
      )}
    </Wrapper>
  );
};

차이가 보이시나요..?

  • const navigate = useNavigate(); 코드를 추가한 순간부터 리렌더 범위가 확장되었습니다.
    • Header 컴포넌트 내부가 리렌더되지 않았는데, 갑자기 Header 컴포넌트가 리렌더 되기 시작했다.

이유를 아시는 분 제보 부탁드립니다..

💊 비타500

📌 프로젝트

🐾 개발 일지

🥑 그룹활동

🌴 멘토링
🥕 데일리 스크럼
🍒 데일리 개인 회고
🐥 주간 회고
👯 발표 자료
Clone this wiki locally