React useDeferredValue — 遅延検索とリストフィルタリング

useDeferredValueを使って、高コストなリストフィルタリング中も検索入力をレスポンシブに保つ方法。デバウンスとの比較、古いコンテンツの表示、React.memoとの統合を網羅。

Transition Hooks

詳細な説明

useDeferredValueによる遅延更新

useDeferredValueは、緊急の更新時に遅れて追従する値の遅延バージョンを返します。入力をレスポンシブに保ちながら、高コストな子レンダリングをバックグラウンドで処理します。

デバウンスとの違い

側面 useDeferredValue デバウンス
更新 React管理、中断可能 タイマーベース、固定遅延
古さのインジケーター 組み込み(値の比較) 手動実装
Suspenseとの連携 あり 特別な統合なし
デバイス適応 あり(速いデバイスでは速い) どこでも同じ遅延

React.memoとの組み合わせ

useDeferredValueは、高コストな子コンポーネントがReact.memoでラップされている場合に最も効果的です。これにより、遅延値が実際に変更されたときのみ子が再レンダリングされます。

初期値(React 19)

React 19では、最初のレンダリング時の初期値としてオプションの第2引数が追加されました:

const deferredQuery = useDeferredValue(query, ""); // 初期値: ""

ユースケース

高コストなリストレンダリングを伴う入力検索、オートコンプリートドロップダウン、ダッシュボードのフィルタリング、結果の即座の表示よりも入力のレスポンシブ性が重要なシナリオにuseDeferredValueを使用します。

試してみる — React Hooks Reference

フルツールを開く