ホームページ  >  に質問  >  本文

Pinia の継承/共有操作とゲッター

アクションとゲッターのセットを共有することになっているいくつかの Pinia ストアがありますが、これを効率的に実装する方法がよくわかりません。

私は、ユーザーがさまざまなメディア (書籍、映画、テレビ番組など) を管理できるアプリケーションを構築しています。今考えているのは、BookStore、MovieStoreなどのメディアタイプごとにストアを作ることです。多くのゲッターと操作 (countdeleteOne など) は、これらの異なるストア間で同一です。

ここで DRY を実装するにはどうすればよいですか? Pinia ドキュメントの例は、他のストア内でのアクションとゲッターの再利用に焦点を当てていますが、これはゲッターとセッターのセットを直接継承する私のユースケースに完全に対応しているとは思えません。

ここで試している継承アプローチはアンチパターンですか?

P粉662614213P粉662614213302日前473

全員に返信(2)返信します

  • P粉420958692

    P粉4209586922023-12-23 12:54:52

    一部の機能をすべてのストアではなく共有したい場合は、コンポーザブルを使用できます。

    別のコンポーズ可能な関数を作成し、ストア インスタンスの一部をその関数に渡すことができます。

    codesandbox でサンプルを作成しました。

    コードサンドボックスの短い例を次に示します:

    common.ts

    リーリー

    その後、どのストアでも次のように使用できます:

    fooStore.ts

    リーリー

    この方法で、任意のストレージまたはコンポーネントで任意の関数、オブジェクトなどを作成できます。

    返事
    0
  • P粉449281068

    P粉4492810682023-12-23 00:43:42

    これはプラグインを使用して実現できます docs

    サンプルムービー:

    複数の店舗があり、各州で共有の命名スキームが使用されています:

    • プロジェクト: 単一エンティティ プロジェクト (単一ムービーの詳細)
    • コレクション: アイテムコレクション (すべてのムービーのコレクション)

    各ストアは同じ CRUD 操作を行いますが、URL が変更されるだけです

    プラグインの作成:

    リーリー

    Ponia 用のプラグインを提供します:

    リーリー

    movieStore.js の例 (共有アクションと状態を使用)

    リーリー

    コンポーネントでの使用例

    リーリー

    編集者: 1

    コンテキストをプラグインに渡すと、ストアとそれに渡されたオプションにアクセスでき、そこからストア ID を確認して、以下に示すように特定のストアのみを返すことができます

    リーリー

    私は 3 つのストアを使用して非常に基本的な例を作成しました。上記のチェックは codesandbox で利用できます ここ < /a>

    返事
    0
  • キャンセル返事