clientLoader
loader
に加えて(または代わりに)、クライアントで実行されるclientLoader
関数を定義できます。
各ルートは、レンダリング時にルートにデータを提供するclientLoader
関数を定義できます。
この関数はクライアントでのみ実行され、次のような方法で使用できます。
- フルクライアントルートのサーバー
loader
の代わりに - ミューテーションでキャッシュを無効化することにより、
clientLoader
キャッシュと一緒に使用する場合- サーバーへの呼び出しをスキップするためのクライアント側のキャッシュを維持
- Remix BFF ホップをバイパスして、クライアントから直接APIにアクセス
- サーバーからロードされたデータをさらに拡張する場合
- 例:
localStorage
からユーザー固有の設定を読み込む
- 例:
- React Routerからの移行を容易にする
水和の動作
デフォルトでは、clientLoader
は、初期SSRドキュメントリクエストでのRemixアプリの水和中に、ルートに対して実行されません。これは、clientLoader
がサーバーloader
データの形状を変更せず、後続のクライアント側ナビゲーションの最適化(キャッシュから読み取る、または直接APIにアクセス)であるという主要な(そしてより単純な)ユースケースのためです。
clientLoader.hydrate
初期ドキュメントリクエストで水和中にclientLoader
を実行する必要がある場合は、clientLoader.hydrate=true
を設定することでオプトインできます。これにより、Remixは水和中にclientLoader
を実行する必要があることを認識します。HydrateFallback
がない場合、ルートコンポーネントはサーバーloader
データでSSRされ、clientLoader
が実行されると、返されたデータが水和されたルートコンポーネント内の場所で更新されます。
clientLoader
をエクスポートし、サーバーloader
をエクスポートしない場合、clientLoader.hydrate
は自動的にtrue
として扱われます。これは、サーバーデータがSSRに含まれていないため、水和前にルートコンポーネントをレンダリングするために常にclientLoader
を実行する必要があるためです。
HydrateFallback
clientLoader
から取得する必要があるデータがあるため、SSR中にデフォルトのルートコンポーネントのレンダリングを回避する必要がある場合は、SSR中にレンダリングされるHydrateFallback
コンポーネントをルートからエクスポートできます。clientLoader
が水和で実行されると、ルーターコンポーネントがレンダリングされます。
引数
params
この関数は、loader
と同じparams
引数を受け取ります。
request
この関数は、loader
と同じrequest
引数を受け取ります。
serverLoader
serverLoader
は、このルートのサーバーloader
からデータを取得するための非同期関数です。クライアント側ナビゲーションでは、これはRemixサーバーloader
へのfetch呼び出しを行います。clientLoader
を水和中に実行するようにオプトインした場合、この関数はサーバーですでにロードされたデータ(Promise.resolve
経由)を返します。
関連項目: