mcpField
A
alova-client-usage

alova-client-usage

github.com/alovajs開発5188 回インストール17 週間前に更新
リポジトリ

alova-client-usage について

alova-client-usageは、alovaでクライアント側APIリクエストを扱う開発者向けのリファレンススキルです。リクエストメソッド、フック、キャッシュ、ミドルウェア、各フレームワークのサーバー側利用法をまとめ、詳細には最新の公式ドキュメントを参照するよう案内します。

主な機能

  1. 017種類のリクエストメソッドを参照
  2. 02一般的なリクエスト処理にフックを使用
  3. 03ページネーション、フォーム、再試行、アップロードを設定
  4. 04多層キャッシュと無効化を管理
  5. 05ミドルウェアとアダプターをカスタマイズ

活用シーン

  1. 01コンポーネントの読み込み時や操作時にデータを取得
  2. 02リアクティブ状態の変化に応じて結果を更新
  3. 03ページネーション付きリストや複数ステップフォームを構築
  4. 04再試行、ファイルアップロード、サーバー送信イベントを追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alovajs/skills --skill alova-client-usage

インストール後、Claude Code で/alova-client-usageを入力して読み込まれたか確認します。

同梱ファイルREADME.mdreferences/SETUP.md

詳細

alova バナー

Alova クライアントサイドでの使用方法

サーバーサイド(Node/Bun/Deno)については、alova-server スキルを参照してください。 alova openapi の使用方法については、alova-openapi スキルを参照してください。

このスキルの使い方

このスキルは、次の2つのレイヤーで構成されています。

  1. このファイル — クイックリファレンスインデックスです。各 API の機能と使用するタイミングを確認できます。まずこちらをお読みください。
  2. 公式ドキュメント(必要に応じて取得) — オプションの詳細、エッジケース、または使い慣れていない API については、各セクションに記載されている URL から最新かつ正確な情報を取得してください。

特定の API オプションや動作について質問に回答する前に、必ず公式ドキュメントを取得してください。alova は活発に開発されているため、最新のドキュメントのほうが学習データよりも信頼できます。


インストールとセットアップ

以下については、references/SETUP.md を参照してください。

  • インストール
  • Alova インスタンスの作成
  • フレームワーク固有の StatesHook
  • リクエストアダプター
  • リクエストのグローバル共有とタイムアウト
  • トークンベースのログイン、ログアウト、トークン更新に関するインターセプターの作成
  • キャッシュロガー
  • メソッドスナップショット数の上限設定

メソッドインスタンスの作成

alova は、合計7種類のリクエストタイプを提供します。

インスタンス作成関数パラメーター
GETalovaInstance.Get(url[, config])
POSTalovaInstance.Post(url[, data[, config]])
PUTalovaInstance.Put(url[, data[, config]])
DELETEalovaInstance.Delete(url[, data[, config]])
HEADalovaInstance.Head(url[, config])
OPTIONSalovaInstance.Options(url[, config])
PATCHalovaInstance.Patch(url[, data[, config]])

パラメーターの説明:

  • url はリクエストパスです。
  • data はリクエストボディのデータです。
  • config はリクエスト設定オブジェクトです。リクエストヘッダー、params パラメーター、リクエスト動作のパラメーターなどの設定を含みます。

実際には、上記の関数を呼び出してもリクエストは送信されません。PromiseLike インスタンスであるメソッドインスタンスが作成されます。Promise オブジェクトと同様に、then、catch、finally メソッドまたは await を使用すると、リクエストが送信されます。

alovaInstance
  .Get('/api/user')
  .then((response) => {
    // ...
  })
  .catch((error) => {
    // ...
  })
  .finally(() => {
    // ...
  });

// or
try {
  await userMethodInstance;
} catch (error) {
  // ...
} finally {
  // ...
}

メソッドインスタンス API の全容については、メソッドのドキュメントを参照してください。

メソッドのメタデータ

特定のメソッドインスタンスに追加情報を設定すると、グローバルインターセプターでそのメソッドを識別しやすくなり、レスポンスの返却方法を変えたり、グローバルトーストを抑制したりできます。メソッドのメタデータを設定してください。詳しくは、メソッドのメタデータを参照してください。

コアフック

一般的なリクエストパターンを独自に実装する代わりに、コンポーネント内でこれらのフックを使用してください。

alova/client からインポートします。

フック使用する場面ドキュメント
useRequestマウント時にデータを取得する場合、またはユーザーの操作(ボタンクリック、フォーム送信)で一度だけ実行する場合ドキュメント
useWatcherリアクティブな状態の変化(検索入力、フィルター、タブ、ページ)に応じて自動的に再取得する場合ドキュメント
useFetcherバックグラウンドでデータを目立たないように事前読み込みする場合、またはデータを所有するコンポーネントの外部から更新する場合ドキュメント

ビジネス戦略フック

alova/client からインポートします。

シナリオフック主な機能ドキュメント
ページネーションリスト/無限スクロールusePaginationページの自動管理、次/前のページの先読み、楽観的な追加/削除/置換ドキュメント
フォーム送信(複雑さを問わず)useForm下書きの永続化、複数ステップ間の状態共有、自動リセットドキュメント
ポーリング/フォーカス/再接続時の更新useAutoRequestトリガーの設定、スロットリングドキュメント
SMS、メール認証コードの送信とカウントダウンuseCaptchaクールダウンタイマーを内蔵ドキュメント
コンポーネント間でのリクエストのトリガーactionDelegationMiddleware + accessActionprop-drilling やグローバルストアが不要ドキュメント
連鎖する依存リクエストuseSerialRequest / useSerialWatcher各ステップで前の結果を受け取るドキュメント
指数バックオフによる再試行useRetriableRequest試行回数とジッターを設定可能ドキュメント
進捗状況を表示するファイルアップロードuseUploader同時実行数の制限、進捗イベントドキュメント
Server-Sent EventsuseSSEリアクティブな data と readyStateドキュメント
シームレスなデータインタラクションuseSQRequestUI とのインタラクションに、待機せず即座に応答できますドキュメント

キャッシュ戦略

Alova には L1(メモリ)および L2(永続化/復元)レイヤーに加え、リクエストの自動共有(重複排除)があります。

キャッシュを全体およびスコープ単位で設定する
  • ページ内ですばやくアクセスでき、更新するとリセットされます。ページの更新後も維持する/オフラインファーストにする、キャッシュを無効にする方法については、キャッシュモードを参照してください。
  • ミューテーション後に自動で無効化するには、GET に hitSource、ミューテーション Method に name を指定します。詳しくは、キャッシュの自動無効化を参照してください。
  • 手動で無効化する方法については、キャッシュの手動無効化を参照してください。
  • キャッシュの設定と照会については、キャッシュの操作を参照してください。

重要なルール:hitSource による自動無効化を優先してください。命令型のコードが不要で、コンポーネントを疎結合にできます。

Hooks ミドルウェア

ミドルウェアを使うと、useHooks でリクエストの動作をインターセプトして制御できます。一般的な用途は次のとおりです。

  • 特定の条件下でリクエストを無視する
  • レスポンスデータを変換する
  • リクエストメソッドを変更する、またはキャッシュを強制的にバイパスする
  • エラーを処理する(カスタムエラーを捕捉またはスローする)
  • レスポンスの遅延を制御する
  • リアクティブな状態(loading、data など)を変更する
  • リクエストの再試行ロジックを実装する
  • loading 状態を完全に制御する

ミドルウェア API の全容と使用例については、リクエストミドルウェアを参照してください。

モックリクエスト

特定のリクエストにモックデータを設定します。モックリクエストを参照してください。

ベストプラクティス

  • ドメイン、API、環境ごとに alova インスタンスを複数作成します。
  • リクエスト関数を一元管理するフォルダーを用意し、コードを整理します。
  • コンポーネント内ではフックを使い、それ以外の場所では Method インスタンスを直接呼び出すことを優先します。
  • useRequest(method).onSuccess(...).onError(...) のように、チェーン形式でフックのイベントをバインドすることを優先します。

よくある落とし穴

落とし穴対処方法
useWatcher の第 1 引数が Method インスタンスになっている常に () => method(state.value) でラップします
updateState が何もせずに終了する所有するコンポーネントのマウント中のみ動作します。それ以外では setCache を使います
v3 でキャッシュ操作が同期的に呼び出されるinvalidateCache / setCache / queryCache を await します
useWatcher がマウント時にフェッチしないimmediate: true を設定します

TypeScript

Method インスタンスにレスポンスの型を注釈すると、フックが自動的にその型を推論します。

const getUser = (id: number) => alovaInstance.Get<User>(`/users/${id}`);
// or need to transform data.
const getUser = (id: number) =>
  alovaInstance.Get(`/users/${id}`, {
    transform(user: User) {
      return {
        ...user,
        name: user.lastName + ' ' + user.firstName,
      };
    },
  });

const { data } = useRequest(getUser(1)); // data: Ref<User>

📄 TypeScript ドキュメント

SSR コンポーネントパーティー

alova はサーバーとクライアントの両方で API を管理できるため、サーバー側とクライアント側でそれぞれ異なるリクエストソリューションを使う必要はありません。

CSR

通常、alova のフックはクライアント側でのみ動作します。

// won't send request in server side.
useRequest(getUser(1));
Nextjs

サーバーコンポーネントで Method インスタンスを直接 await します。

const App = async () => {
  const data = await alovaInstance.Get('/todo/list');
  // then ... code
  return <div>{...}</div>;
};
export default App;
Nuxt

alova のフックの前に await を付けると、両側の状態を同期できます。これは useFetch と同じ効果です。

const { data } = await useRequest(getUser(1));
Sveltekit

+page.server.[j|ts] で Method インスタンスを直接 await します。

/** @type {import('./$types').PageServerLoad} */
export async function load({ params }) {
  return {
    list: alovaInstance.Get('/todo/list'),
  };
}

カスタムアダプター

プリセットのアダプターがどれも要件に合わない場合は、独自のアダプターを作成してください。

カスタム Method キー

key を設定して、キャッシュ、リクエスト共有、状態更新の照合戦略を変更します。カスタム Method キーを参照してください。

コメント