hooks에서 state가 변하게 되면 리렌더링되는 부분 질문 있습니다!
274
작성한 질문수 13
강의 정말 잘 듣고 있는 수강생입니다!!!
로또 추첨기 부분을 들으며 궁금한 부분이 있어 질문 드립니다!
다음 캡처 화면에서,

winBalls의 이전 state 값을 바탕으로 하나씩 추가해 나갈 때마다
전체 코드(렌더링부터 함수 선언문까지)가 다시 실행되는 문제가 hooks에서 발생하는 것은 이해했습니다(아직 최적화를 진행하지 않은 시점입니다).
그래서 실제로 위의 getWinNumbers 함수가 불필요하게 실행이 되는 것을 콘솔을 통해 확인할 수 있었습니다.
문제는 여기서 궁금한게, state 선언문의
const [winNumbers, setWinNumbers] = useState(getWinNumbers());
가 다시 실행이 되는 데에 있는데요,
기존 처음의 winNumbers 배열을 가지고서 setTimeout을 이용해 하나 하나 6개까지 push를 하고 있는 상황인데,
push를 하면서 state 변경을 감지해 다시
const [winNumbers, setWinNumbers] = useState(getWinNumbers());
가 실행되어 버리면 셔플된 배열을 다시 winNumbers가 갖게 되는 상황이 생기게 되는 것 아닌가요?!
예를 들어, 처음 winNumbers 배열이 [1, 2, 3, 4, 5, 6 ... ] 이렇게 되어 있었다 가정하면,
winBalls state 변수에 1을 push한 후에 (for문의 i는 0)
변경을 감지하여 다시
const [winNumbers, setWinNumbers] = useState(getWinNumbers());
가 실행되어 winNumbers가 [2, 1, 3, 4, 5, 6 ...] 이런 배열을 갖게 된다면
for문의 i=1에서 이전과 똑같은 1을 push하게 되어 중복이 발생하지 않을까요?
하지만 그런 문제는 일어나지 않고 있긴 합니다.
왜 그런지 이유를 잘 모르겠습니다 ㅠㅠ
답변 1
1
useState(초깃값)에서 초깃값은 한 번 설정되면 다른 값으로 변하지 않습니다. getWinNumbers는 계속 호출돼도 useState에는 영향이 없습니다.
npm run dev 실행 시 포트가 안뜨는 문제
0
235
2
timeouts.current를 useEffect 의 input값으로 넣었을때
0
95
2
렌더링 테스트 코드 (Hooks)
0
93
1
Cannot find package 'react-refesh' 이런 에러 뜨시는 분들 보세요.
0
164
1
해당 에러 뜨는 분들 보세요. "Uncaught TypeError: ReactDom.createRoot is not a function"
1
205
1
강사님 레포지토리에서 코드 복사 시 master 브랜치 말고 react18 브랜치꺼 복붙하세요ㅠㅠ
0
105
1
useMemo와 useCallback 사용 시기
0
218
2
onRightClickTd가 작동을 하지 않습니다.
0
233
1
action.type 불러오는 방식
0
225
2
onClickRedo 질문
0
176
1
const Try = require(./Try) 빨간줄
0
258
1
npx webpack 실행시
0
323
1
지뢰찾기 강좌에서 빈칸들 한번에 열기 파트에서 여쭤보고싶은부분이 있어서 글 올립니다.
0
241
1
강좌에서 다루지 않은 기능들은 어떻게 학습하면 좋을까요?
0
318
1
react devtool이 enable 않됩니다.
0
544
2
React 랜더링이 되지 않습니다.
0
421
2
비동기로 동작하는 setState에 대해서
0
337
1
npm run dev 할 때 에러발생
0
494
2
memo, PureComponenet, shouldComponentUpdate 관련 질문
0
210
1
devMiddleware의 필요성
0
357
1
리액트에서 화살표 함수를 사용해야하는 이유
0
946
2
path.join관련질문
0
287
2
2-9. 웹팩 데브 서버와 핫 리로딩 설치과정 시 에러
0
384
1
next.js 에서 이와 비슷한 예제를 돌리고있는데 react랑 달라서 질문 드립니
1
502
4





