// Automatic Batching
- 여러 개의 state 업데이트를 각각 처리하는 것이 아니라 묶어서 한 번에 처리하는 것
- 재렌더링 횟수를 줄일 수 있다.
setTimeout(() => { setCount(...); setName(...) }, 1000); |
|
이전 | 버전 18 |
setCount(...) 처리 후 재렌더링 setName(...) 처리 후 재렌더링 |
setCount(...) 처리 후 setName(...) 처리까지 한 후 재렌더링 |
// Transition
- 긴급한 업데이트와 긴급하지 않은 업데이트를 구분해서 긴급한 업데이트를 먼저 처리한다.
~ 긴급한 업데이트 : 사용자와 직접적인 인터랙션 有
~ 긴급하지 않은 업데이트 : 사용자와 직접적인 인터랙션 無
- 긴급하지 않은 업데이트가 실행 중이더라도 긴급한 업데이트가 필요하면 중단될 수 있다.
import { startTransition } from 'react';
setInput(input); //입력값 화면에 바로바로 보여주기 > 긴급 업데이트
startTransition(() => {
setResult(input); //입력값에 따른 결과 보여주기 > 긴급하지 않은 업데이트
});
// Suspense
- 하위 컴포넌트가 준비되기 전까지 렌더링을 중단하는 것
- 클라이언트 사이드 렌더링만 가능했는데, 서버 사이드 렌더링도 가능하도록 업데이트 되었다.
- Transition API와 연동할 수 있게 되었다.
import { laxy, Suspense } from 'react';
import { Loading } from './Loading';
const ChildComponent = lazy(() => import('./ChildComponent'));
function MainComponent(props) {
return (
<Suspense fallback={<Loading />}>
<ChildComponent />
</Suspense>
);
}
> ChildComponent가 준비되기 전까지 fallback 안에 있는 Loading 컴포넌트를 실행하고, 준비되면 ChildComponent를 실행한다.
// React DOM Client
이전 | 버전 18 |
ReactDOM.render( <React.StrictMode> <App /> </ React.StrictMode > document.getElementById('root'); ); |
const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App /> </React.StrictMode> ); |
// React DOM Server
이전 | 버전 18 |
● renderToString - 컴포넌트 트리를 HTML 문자열로 변환하는 함수 |
● renderToPipeableStream - NodeJS 환경에서 스트리밍을 위한 함수 ● renderToReadableStream - Edge runtime 환경을 위한 함수 |
// Strict Mode
- 개발 모드에서 Strict Mode를 사용하면 컴포넌트를 unmount 시켰다가 다시 한 번 mount 시킨다.
// Hook 추가
- useId()
- 서버 & 클라이언트에서 고유한 값을 생성하는 hook
- List의 key 에 사용하는 용도 x - useTransitions()
- 긴급하지 않은 업데이트를 다루는 hook
≒ startTransition() - useDeferredValue()
- 긴급하지 않은 업데이트의 재렌더링을 미루는 hook
- 지연된 렌더링 - useSyncExternalStore()
- 외부 저장소를 구독할 수 있게 해주는 hook
- state와 외부 저장소를 연동할 수 있다. - useInsertionEffect()
- 렌더링 과정에서 style 삽입의 성능 문제를 해결하는 hook
- css 라이브러리에서 사용한다.
'클라이언트 > React' 카테고리의 다른 글
[리액트(React)] Fragments (0) | 2024.01.19 |
---|---|
[리액트(React)] CSS 스타일링 및 동적 스타일링 (0) | 2024.01.18 |
[리액트(React)] styled-components (0) | 2024.01.10 |
[리액트(React)] Context API (0) | 2024.01.09 |
[리액트(React)] Composition (0) | 2024.01.08 |