리액트

리액트의 최신 버전과 기능들

React 18 - Concurrent Mode (동시성 모드)

리액트 18에서는 Concurrent Mode라는 중요한 기능이 도입되었습니다. 동시성 모드는 애플리케이션의 응답성을 향상시키고, 여러 작업을 동시에 처리할 수 있도록 지원합니다. 이를 통해 사용자는 UI가 응답하지 않는 것처럼 느끼지 않고, 애플리케이션의 다양한 작업들이 백그라운드에서 효율적으로 처리될 수 있습니다. 예를 들어, 리액트는 긴 작업을 백그라운드에서 실행하면서 사용자 입력에 빠르게 반응할 수 있게 됩니다. 이 모드는 기본적으로 비동기적으로 실행되어 성능과 사용자의 경험을 개선할 수 있습니다.

자동 배치(Auto Batching)

리액트 18에서는 자동 배치(Auto Batching) 기능이 추가되어 상태 업데이트가 더 효율적으로 처리됩니다. 자동 배치는 여러 개의 상태 업데이트를 하나의 배치로 묶어서 처리함으로써 렌더링 최적화를 돕습니다. 이전에는 이벤트 핸들러나 setTimeout, Promise와 같은 비동기 작업에서 상태 업데이트가 여러 번 발생하면 각각 리렌더링이 이루어졌지만, 이제는 이러한 업데이트들을 하나의 배치로 묶어 리렌더링 횟수를 줄입니다. 이로 인해 애플리케이션의 성능이 향상되고, 불필요한 렌더링을 줄일 수 있습니다.

useId 훅

리액트 18에서는 useId 훅이 새롭게 도입되었습니다. useId는 서버 측 렌더링(SSR)과 클라이언트 측 렌더링(CSR) 간의 ID 불일치를 해결하는 데 도움을 줍니다. 이 훅은 고유한 ID를 생성하고, 이를 컴포넌트 내에서 안전하게 사용할 수 있게 해줍니다. 서버에서 렌더링된 HTML과 클라이언트에서 렌더링된 HTML이 일치하도록 보장하며, 주로 접근성 및 동적 렌더링이 필요한 경우에 유용합니다. 이 훅을 사용하면, 요소에 대해 고유한 식별자를 생성할 때 발생할 수 있는 문제를 해결할 수 있습니다.

Suspense for Data Fetching

리액트 18에서는 Suspense for Data Fetching이 정식으로 지원됩니다. 이전에는 Suspense가 주로 코드 분할과 관련된 기능으로 사용되었으나, 이제는 데이터 로딩 상태를 처리하는 데에도 사용됩니다. Suspense는 비동기적으로 데이터를 로드하는 동안 컴포넌트를 기다리도록 하고, 로딩 상태에 대한 UI를 관리할 수 있도록 합니다. 이를 통해 API 호출과 같은 비동기 작업이 완료될 때까지 로딩 화면을 표시하거나, 다른 컴포넌트의 렌더링을 지연시킬 수 있습니다. useEffect와 함께 사용하여, 데이터가 준비되었을 때만 컴포넌트가 렌더링되도록 할 수 있습니다.

새로운 JSX 변환 및 Babel 7.9 이상

리액트 17에서는 JSX 변환 방식이 변경되었으며, 리액트 18에서는 이 방식이 계속해서 개선되었습니다. JSX 코드가 더 이상 React.createElement를 자동으로 호출하지 않고, 새로운 JSX 변환을 통해 리액트 라이브러리 없이 JSX를 변환할 수 있습니다. 이는 Babel 7.9 이상에서 지원되며, 리액트가 더 가벼워지고, 성능이 개선되는 효과를 가져옵니다. 이 새로운 변환 방식은 개발자가 JSX를 작성할 때 import React from 'react' 구문을 생략할 수 있게 해주며, 코드의 양을 줄이고 가독성을 향상시킵니다.