React 18は、Concurrent Renderingを土台とした大きなアップデートで、それ以降のReact開発の標準を決定づけたバージョンです。Suspense・Transitions・Automatic Batchingなど、開発効率とUXの両方を底上げする機能が多数追加されました。本記事では、React 18の新機能と開発効率を上げるポイントを整理します。
React 18のテーマ:Concurrent Rendering
React 18最大のテーマは「Concurrent Rendering(並行レンダリング)」です。レンダリングを中断・再開・優先度付けできる仕組みが入り、これを土台にSuspenseやTransitionsなどのUX改善機能が成立しています。開発者が直接APIを叩くわけではなく、後述の機能を通じて恩恵を受ける形になっています。
主要な新機能
1. createRootによる新しいマウントAPI
従来のReactDOM.renderは廃止予定となり、createRootに置き換わりました。これにより、Concurrent機能が自動で有効になります。
// React 17 まで
ReactDOM.render(<App />, document.getElementById('root'));
// React 18 以降
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
2. Automatic Batching
非同期コールバック内(setTimeout、Promise.then、ネイティブイベントハンドラなど)でも、複数のstate更新が自動でまとめて1回の再レンダリングに最適化されるようになりました。これだけで多くのアプリで体感速度が改善します。
3. useTransition / startTransition
「重い更新」を低優先度として扱い、入力やクリックなどの即時応答を優先できるAPIです。検索ボックスのフィルタリングなど、UIのカクつき改善に効きます。
const [isPending, startTransition] = useTransition();
function onChange(e) {
setQuery(e.target.value); // 高優先度(即時反映)
startTransition(() => {
setResults(filter(allItems, e.target.value)); // 低優先度
});
}
4. useDeferredValue
useTransitionと近い目的で、「値の更新を遅延させる」ことができます。重い子コンポーネントへ渡すpropsをdeferredにすることで、入力遅延を防げます。
const deferredQuery = useDeferredValue(query);
return <SearchResults query={deferredQuery} />;
5. Suspense for Data Fetching(土台)
Suspenseの仕組みがデータ取得にも公式に対応しました。これにより、Next.js App RouterやReact Server Components、Relay、TanStack Queryなどの上位レイヤで「Suspense連携の宣言的なローディング処理」が標準化されました。
<Suspense fallback={<Spinner />}>
<UserProfile />
</Suspense>
6. useId
SSRでも一致するユニークIDを生成できるフックです。labelとinputを紐付ける際などに重宝します。
const id = useId();
return (
<>
<label htmlFor={id}>Name</label>
<input id={id} />
</>
);
7. Strict Modeの強化
開発時にコンポーネントが2回マウントされる挙動が追加され、副作用の冪等性を意識した実装が促されるようになりました。最初は驚きますが、これに耐える設計は将来のConcurrent対応に直結します。
開発効率を上げるポイント
- SSRやデータ取得はSuspense前提に:Next.js App Router・TanStack Queryなどを使うと自然と恩恵を受けやすい
- 重い処理はTransitionに切り出す:startTransitionを使うだけで体感が大きく改善
- Strict Modeの2回実行に耐える設計:副作用のクリーンアップを徹底
- 状態管理はZustand・Jotai・TanStack Queryなど18対応ライブラリを選ぶ
移行時の注意点
- createRootへの置き換えは必須(互換モードあり)
- サードパーティライブラリは18対応バージョンを確認
- TypeScript利用時は
@types/reactのメジャー更新で型互換に注意
まとめ
React 18は、UXの底上げと開発者の表現力強化を両立した重要なバージョンです。createRoot・Transitions・Suspense・useIdを押さえれば、今のReactエコシステム(Next.js / RSC / TanStack Queryなど)にスムーズに乗っていけます。まずは既存プロジェクトをReact 18にアップグレードし、startTransitionを1箇所試してみるところから始めるのがおすすめです。