Automatic batching

Automatic batching

batching이란 업데이트 대상이 되는 상태값들을 하나로 묶어 한번의 리렌더링에 업데이트가 모두 진행되도록 해주는 것을 의미한다.

const handleClick = () => {
  setCount(prev => prev + 1);
  setFlag(prev => !prev);
  // 오직 한번만 리렌더링
}
  • 하나의 함수 내에서 setState를 여러번 호출해도 리렌더링은 한 번만 발생한다.

  • 함수의 끝에서 업데이트 되며 리엑트는 마지막에 한번 리렌더링을 시킨다.

  • 여러번의 불필요한 리렌더링을 방지하기 때문에 성능에 이점이 있다.

React 18에서의 Batching

  • 이벤트 핸들러 밖에서도 동작하도록 변경되었다.

  • 필요할 때 bach 업데이트를 제외시킬 수 있는 기능이 추가 되었다.

batch 업데이트를 하지 않으려면?

일반적인 상황에서는 일괄 처리가 안전하지만, 일부 코드는 상태 변경 직후 DOM에서 무언가를 읽는데 의존할 수 있다. 이러한 경우 ReactDOM.flushSync() 를 사용하여 일괄 처리를 옵트아웃 시킬 수 있다.

import { flushSync } from 'react-dom';

const handleClick = () => {
  flushSync(() => {
    setCount(prev => prev + 1); // re-render
  })
  
  flushSync(() => {
    setFlag(prev => !prev); // re-render 2
  })
}

Last updated