inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹 게임을 만들며 배우는 React

3-1. import와 require 비교

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

331

루룸

작성한 질문수 16

0

안녕하세요 제로초님
setState 질문이 있는데요

아래 코드에서
1번 코드의 경우 setState함수는 비동기라서 해당 이벤트 함수가 실행된 후 setState함수를 모아서 일괄 처리하기 때문에 +3이 아닌 +1로 렌더링된다 라고 알고 있는데요

2번 코드에서는 왜 +3으로 렌더링되는지 이해가 되지 않아서요. setNum((prev) => prev + 1) 처럼 이전 state 값을 받아오는 형태도 아닌데 어떤 원리로 1번 코드와 2번 코드가 서로 다르게 동작하는 것인지 궁금합니다

 

import React, {useState} from 'react';

export function App(props) {
  let [num, setNum] = useState(0);
  const increase1 = () => {
    // 1번 코드
    setNum(num + 1);
    setNum(num + 1);
    setNum(num + 1);

    // 2번 코드
    setNum(num = num + 1);
    setNum(num = num + 1);
    setNum(num = num + 1);
    
    console.log(`${num}번째 1+ 이벤트 발생 ---> num: ${num}`);
  }
  console.log(`렌더링 ---> num : ${num}`);
  return (
    <div className='App'>
      <button type="button" onClick={increase1}>+1</button>
      <p>{num}</p>
    </div>
  );
}

react

답변 1

0

제로초(조현영)

저렇게 연달아서 호출하면 배열(큐)에 쌓이게 됩니다.

[num + 1, num + 1, num +1]이 쌓이게 되고 함수가 아니라면 마지막게 state가 됩니다. num이 1이면 [2, 2, 2]입니다.

[num = num + 1, num = num + 1, num = num + 1]은 [2, 3, 4]가 됩니다. num = num + 1의 리턴값은 num + 1입니다. 콘솔에 한 번 쳐보세요.

0

제로초(조현영)

image

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

0

202

2

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

0

85

2

렌더링 테스트 코드 (Hooks)

0

80

1

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

0

149

1

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

1

191

1

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

0

95

1

useMemo와 useCallback 사용 시기

0

205

2

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

0

226

1

action.type 불러오는 방식

0

222

2

onClickRedo 질문

0

172

1

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

0

248

1

npx webpack 실행시

0

313

1

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

0

234

1

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

0

311

1

react devtool이 enable 않됩니다.

0

530

2

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

0

409

2

npm run dev 할 때 에러발생

0

478

2

memo, PureComponenet, shouldComponentUpdate 관련 질문

0

206

1

devMiddleware의 필요성

0

352

1

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

0

931

2

path.join관련질문

0

280

2

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

0

371

1

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

1

488

4

useInterval.js 커스텀 훅에서, 왜 첫번째 useEffect를 계속 반복해야할까요?

0

462

2