React 18の新機能:Concurrentモードと自動バッチング
- 作成日 2025.01.07
- その他
React 18では、パフォーマンス向上と効率的なレンダリングを実現するために、Concurrentモードと自動バッチングが導入されました。本記事では、これらの新機能の詳細と具体的な活用方法を解説します。
目次
1. Concurrentモードとは
Concurrentモードは、Reactがレンダリングの優先度を自動で調整し、UIの応答性を高める仕組みです。
import { createRoot } from 'react-dom/client';
import App from './App';
const root = createRoot(document.getElementById('root'));
root.render(<App />);2. 自動バッチングの概要
React 18では、自動的に複数の状態更新が1つの再レンダリングにまとめられ、効率的に処理されます。
import { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
const [name, setName] = useState('');
function handleClick() {
setCount((c) => c + 1);
setName('React');
}
return (
<div>
<button onClick={handleClick}>Update</button>
<p>Count: {count}</p>
<p>Name: {name}</p>
</div>
);
}3. Concurrentモードの利点
複数の状態更新が同時に発生しても、UIのブロックが最小限に抑えられます。
4. 自動バッチングの動作
複数の状態更新がある場合、Reactは自動でそれらを1回の再レンダリングで処理します。
5. startTransition API
startTransition APIを使用すると、優先度の低い更新をスケジュールできます。
import { startTransition, useState } from 'react';
function App() {
const [count, setCount] = useState(0);
function handleClick() {
startTransition(() => {
setCount((c) => c + 1);
});
}
return <button onClick={handleClick}>Increment</button>;
}6. useTransitionフック
useTransitionフックは、UIをブロックせずに状態を遷移させるための新しいフックです。
import { useTransition, useState } from 'react';
function App() {
const [isPending, startTransition] = useTransition();
const [count, setCount] = useState(0);
function handleClick() {
startTransition(() => {
setCount((c) => c + 1);
});
}
return (
<div>
<button onClick={handleClick}>Increment</button>
{isPending && <p>Updating...</p>}
</div>
);
}7. Suspenseの強化
Suspenseは、データ取得中にローディングUIを表示する機能として強化されました。
8. Strictモードの改善
Strictモードでは、追加のデバッグチェックが行われ、開発体験が向上します。
9. 同期と非同期レンダリング
React 18では、同期的なレンダリングと非同期的なレンダリングが柔軟に切り替えられます。
10. 自動バッチングのユースケース
自動バッチングにより、不要な再レンダリングが削減され、アプリケーションが高速化されます。
11. 実装例:Concurrentモード
Concurrentモードを使用する具体的なコード例を紹介します。
import { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount((c) => c + 1)}>Increment</button>
<p>Count: {count}</p>
</div>
);
}12. まとめ
React 18の新機能であるConcurrentモードと自動バッチングは、より高速で効率的なUIを構築するための重要な要素です。
-
前の記事
ReactとVue.jsの違い:フロントエンド開発の選択肢を比較する 2025.01.07
-
次の記事
React Routerを使った動的なナビゲーション 2025.01.07
コメントを書く