HydrateFallback
HydrateFallback
コンポーネントは、Remix に、clientLoader
が hydration を完了するまでルートコンポーネントをレンダリングしないように指示する方法です。エクスポートされると、Remix はデフォルトのルートコンポーネントではなく、SSR 中にフォールバックをレンダリングし、clientLoader
が完了したらクライアントサイドでルートコンポーネントをレンダリングします。
これの最も一般的なユースケースは、クライアントのみのルート(ブラウザ内キャンバスゲームなど)と、サーバーデータにクライアントサイドデータ(保存されたユーザー設定など)を追加することです。
HydrateFallback
の動作に関する注意点がいくつかあります。
- 最初のドキュメントリクエストと hydration にのみ関連し、その後のクライアントサイドナビゲーションではレンダリングされません。
- 特定のルートで
clientLoader.hydrate=true
を設定している場合にのみ関連します。 - また、サーバー
loader
がないclientLoader
がある場合も関連します。これは、useLoaderData
から返されるローダーデータがないため、clientLoader.hydrate=true
が暗黙的に指定されていることを意味します。- この場合、
HydrateFallback
を指定しなくても、Remix はルートコンポーネントをレンダリングせず、祖先のHydrateFallback
コンポーネントにバブルアップします。 - これは、
useLoaderData
が「ハッピーパス」を維持することを保証するためです。 - サーバー
loader
がない場合、useLoaderData
はレンダリングされたルートコンポーネントでundefined
を返します。
- この場合、
- 子ルートが正しく動作することを保証できないため、
HydrateFallback
内に<Outlet/>
をレンダリングすることはできません。なぜなら、子ルートが hydration でclientLoader
関数を実行している場合(つまり、useRouteLoaderData()
やuseMatches()
などのユースケース)、祖先ローダーデータがまだ利用できない可能性があるためです。
関連項目: