inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹 게임을 만들며 배우는 React

안녕하세요 Hook에서 렌더링 질문있습니다.

202

mincho

작성한 질문수 1

0

hook에서 다음과 같은 코드로 렌더링을 몇번 발생하는지 확인해 보았습니다.

첫번째 코드

function App () {
  const [one, setOne] = useState(0);
  const [two, setTwo] = useState(0);
  
  useEffect(()=>{
    setOne(prev => prev + 1);
    setTwo(prev => prev + 1);
  }, []);

  console.log('렌더링!');
  
  return (
    <>
      {one}{two}
    </>
  );
}

두번째 코드

function App () {
  const [one, setOne] = useState(0);
  const [two, setTwo] = useState(0);
  
  useEffect(()=>{
    setTimeout(()=>{
      setOne(prev => prev + 1);
      setTwo(prev => prev + 1);
    }, 1000);
  }, []);

  console.log('렌더링!');
  
  return (
    <>
      {one}{two}
    </>
  );

브라우저 콘솔을 확인한 결과, 첫번째 코드는 렌더링이 2번, 두번째 코드는 렌더링이 3번 발생했습니다.

초기 렌더링을 제외하면,

첫번째 코드에서는 react가 setOne과 setTwo를 한번에 처리해줘서 추가적으로 렌더링이 1번 발생한 것 같고,

두번째 코드에서는 react가 setOne과 setTwo를 각각 따로 한번씩 처리해줘서 렌더링이 2번 발생한 것 같은데...

첫번째와 두번째 각각 왜 이러한 현상이 발생하는 건지 궁금합니다..ㅠㅠ

 

react

답변 1

1

제로초(조현영)

첫번째가 기본적인 동작이고요. 원래 setState 여러 개를 합쳐서 한 번에 반영합니다.

다만 두번째처럼 setTimeout이나 promise같은 비동기 안에 있으면 리액트가 이걸 제대로 파악하지 못해 따로따로 리렌더링이 되어버립니다. 이 현상은 리액트 18에서 개선되었던 것 같습니다.

npm run dev 실행 시 포트가 안뜨는 문제

0

240

2

timeouts.current를 useEffect 의 input값으로 넣었을때

0

98

2

렌더링 테스트 코드 (Hooks)

0

93

1

Cannot find package 'react-refesh' 이런 에러 뜨시는 분들 보세요.

0

167

1

해당 에러 뜨는 분들 보세요. "Uncaught TypeError: ReactDom.createRoot is not a function"

1

209

1

강사님 레포지토리에서 코드 복사 시 master 브랜치 말고 react18 브랜치꺼 복붙하세요ㅠㅠ

0

108

1

useMemo와 useCallback 사용 시기

0

222

2

onRightClickTd가 작동을 하지 않습니다.

0

237

1

action.type 불러오는 방식

0

226

2

onClickRedo 질문

0

177

1

const Try = require(./Try) 빨간줄

0

262

1

npx webpack 실행시

0

324

1

지뢰찾기 강좌에서 빈칸들 한번에 열기 파트에서 여쭤보고싶은부분이 있어서 글 올립니다.

0

243

1

강좌에서 다루지 않은 기능들은 어떻게 학습하면 좋을까요?

0

319

1

react devtool이 enable 않됩니다.

0

548

2

React 랜더링이 되지 않습니다.

0

422

2

비동기로 동작하는 setState에 대해서

0

340

1

npm run dev 할 때 에러발생

0

497

2

memo, PureComponenet, shouldComponentUpdate 관련 질문

0

211

1

devMiddleware의 필요성

0

359

1

리액트에서 화살표 함수를 사용해야하는 이유

0

948

2

path.join관련질문

0

288

2

2-9. 웹팩 데브 서버와 핫 리로딩 설치과정 시 에러

0

384

1

next.js 에서 이와 비슷한 예제를 돌리고있는데 react랑 달라서 질문 드립니

1

503

4