본문 바로가기
React

setState할 때 […] 하는 이유

by haheehee 2023. 8. 30.

setState 역할

  • setState()가 쓰일 때, 컴포넌트의 state 객체에 대한 업데이트를 실행
  • state가 변경되면, 컴포넌트는 리 렌더링

state와 props의 차이점

  • props와 state는 Javascript 객체입니다. 두 객체 모두 렌더링 결과물에 영향을 주는 정보를 갖고 있습니다.
  • props는 컴포넌트에 전달되며, state는 컴포넌트 안에서 관리되는 차이점이 있습니다.

언제 setState가 비동기로 작동할까?

import React, { useState } from "react";

function App() {
  const [state, setState] = useState(1);

  const onClick = () => {
    setState(state + 1);
    console.log(state);
  };

  return (
    <div className="App">
      <button onClick={onClick}>+1</button>
      <p>현재 값 {state}</p>
    </div>
  );
}

export default App;
  • 현재 setState는 이벤트 핸들러 내에서 비동기적입니다.
  • 위 코드는 state 값은 반영이 되지만, console에 찍힌 값은 이전 상태 값을 출력합니다 (console.log의 결괏값이 이전 상태를 나타냄).
  • React가 브라우저 이벤트가 끝날 시점에 state를 일괄적으로 업데이트하기 때문

연속적으로 setState 호출 시 야기되는 문제

import React, { useState } from "react";

function App() {
  const [state, setState] = useState(1);

  const onClick = () => {
    setState(state + 1);
    setState(state + 1);
    setState(state + 1);
  };

  return (
    <div className="App">
      <button onClick={onClick}>+1</button>
      <p>현재 값 {state}</p>
    </div>
  );
}

export default App;
  • 위 코드에서 내가 하고 싶은 결과는 버튼을 클릭할 때마다, 매번 +3 씩 출력되길 원합니다.
    • 하지만 오직 +1 씩만 증가해서 출력되는 걸 볼 수 있습니다.
  • 그 이유는 React가 batch update를 하기 때문

setState()를 연속적으로 호출하면 Batch 처리

'React' 카테고리의 다른 글

Context  (0) 2023.08.31
React에서의 불변성(Immutability)  (1) 2023.08.30
setState할 때 […] 하는 이유 (ChatGPT)  (0) 2023.08.30
React  (0) 2023.08.30
React & JSX (Java Script XML)  (0) 2023.08.30

댓글