Fetcher の使用
Fetcher は、ナビゲーションを発生させることなく、複数の同時データ操作を必要とする複雑で動的なユーザーインターフェースを作成するのに役立ちます。
Fetcher は、独自の独立した状態を追跡し、データのロード、データの変更、フォームの送信、および一般的にローダーやアクションとの対話に使用できます。
アクションの呼び出し
Fetcher の最も一般的なケースは、アクションにデータを送信し、ルートデータの再検証をトリガーすることです。次のルートモジュールを考えてみましょう。
1. アクションを追加する
まず、Fetcher が呼び出すアクションをルートに追加します。
2. Fetcher を作成する
次に、Fetcher を作成し、それを使用してフォームをレンダリングします。
3. フォームを送信する
ここでフォームを送信すると、Fetcher はアクションを呼び出し、ルートデータを自動的に再検証します。
4. 保留中の状態をレンダリングする
Fetcher は、非同期処理中にその状態を利用できるようにするため、ユーザーが操作した瞬間に保留中の UI をレンダリングできます。
5. 楽観的な UI
フォームに次の状態をすぐにレンダリングするのに十分な情報がある場合があります。fetcher.formData
を使用してフォームデータにアクセスできます。
6. Fetcher データと検証
アクションから返されたデータは、Fetcher の data
プロパティで利用できます。これは主に、失敗した変更のエラーメッセージをユーザーに返すのに役立ちます。
データのロード
Fetcher のもう 1 つの一般的なユースケースは、コンボボックスのようなもののためにルートからデータをロードすることです。
1. 検索ルートを作成する
非常に基本的な検索を備えた次のルートを考えてみましょう。
2. コンボボックスコンポーネントで Fetcher をレンダリングする
- アクションは、上記で作成したルート "/search-users" を指します。
- 入力の名前は、クエリパラメータと一致するように "q" です。
3. 型推論を追加する
型のみをインポートするように import type
を使用してください。
4. データをレンダリングする
フォームを送信して結果を表示するには、「Enter」キーを押す必要があることに注意してください。
5. 保留中の状態をレンダリングする
6. ユーザー入力で検索する
Fetcher は、fetcher.submit
を使用してプログラムで送信できます。
入力イベントのフォームが fetcher.submit
の最初の引数として渡されることに注意してください。Fetcher は、そのフォームを使用してリクエストを送信し、その属性を読み取り、その要素からデータをシリアル化します。