안녕하세요 Hook에서 렌더링 질문있습니다.
202
작성한 질문수 1
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번 발생한 것 같은데...
첫번째와 두번째 각각 왜 이러한 현상이 발생하는 건지 궁금합니다..ㅠㅠ
답변 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





