※ Automatic Batching (17버전)
- 여러개의 state 값이 하나의 핸들러 함수 안쪽에서 동시에 변경이 될 때 그룹으로 묶어서 한번만 렌더링 처리
- 17에도 동작되는 기능이긴 하나 promise를 반환하는 함수 안쪽에 여러개의 state값이 변경될 경우에는 동작 안됨
※ Automatic Batching (18버전)
- 핸들러함수 안쪽에서 복수개의 state값이 변경될때 해당 변경사항을 묶어서(batching)해서 한번만 리랜더링
- 기존 17버전에서는 promise를 반환하는 함수 안에서는 auto batching동작 불가 (18버전에서 개선됨)
- 리액트 18에서 동일 핸들러함수 안쪽에 있더라도 flushSync를 이용해 특정 State만 auto batching에서 제외 처리 가능
같은 소스임에도 출력되는 내용이 달라짐
function App() {
console.log('rendered');
const [Count, setCount] = useState(0);
const [Count2, setCount2] = useState(0);
const returnPromise = () => {
return new Promise((res) => setTimeout(res, 500));
};
const handleClick = () => {
returnPromise().then(() => {
setCount(Count + 1);
setCount2(Count2 + 1);
});
};
return (
<div className='App'>
<button onClick={handleClick}>button</button>
<h1>
{Count}-{Count2}
</h1>
</div>
);
}
export default App;
'IT > React' 카테고리의 다른 글
[React] React 18 버전에서의 SSR 작업 흐름 (0) | 2023.08.02 |
---|---|
[React] useTransition 정리 (0) | 2023.08.02 |
[React] addEventListener를 쓸 때 주의 할 점 (0) | 2023.07.31 |
[React] promise.all , promise.race 정리 (0) | 2023.07.24 |
[React] React-toolkit 정리 (0) | 2023.07.18 |