アクションとゲッターのセットを共有することになっているいくつかの Pinia ストアがありますが、これを効率的に実装する方法がよくわかりません。
私は、ユーザーがさまざまなメディア (書籍、映画、テレビ番組など) を管理できるアプリケーションを構築しています。今考えているのは、BookStore、MovieStoreなどのメディアタイプごとにストアを作ることです。多くのゲッターと操作 (count
や deleteOne
など) は、これらの異なるストア間で同一です。
ここで DRY を実装するにはどうすればよいですか? Pinia ドキュメントの例は、他のストア内でのアクションとゲッターの再利用に焦点を当てていますが、これはゲッターとセッターのセットを直接継承する私のユースケースに完全に対応しているとは思えません。
ここで試している継承アプローチはアンチパターンですか?
P粉4209586922023-12-23 12:54:52
一部の機能をすべてのストアではなく共有したい場合は、コンポーザブルを使用できます。
別のコンポーズ可能な関数を作成し、ストア インスタンスの一部をその関数に渡すことができます。
codesandbox でサンプルを作成しました。
コードサンドボックスの短い例を次に示します:
common.ts
リーリーその後、どのストアでも次のように使用できます:
fooStore.ts
リーリーこの方法で、任意のストレージまたはコンポーネントで任意の関数、オブジェクトなどを作成できます。
P粉4492810682023-12-23 00:43:42
これはプラグインを使用して実現できます docs
サンプルムービー:
複数の店舗があり、各州で共有の命名スキームが使用されています:
各ストアは同じ CRUD 操作を行いますが、URL が変更されるだけです
プラグインの作成:
リーリーPonia 用のプラグインを提供します:
リーリーmovieStore.js の例 (共有アクションと状態を使用)
リーリーコンポーネントでの使用例
リーリー編集者: 1
コンテキストをプラグインに渡すと、ストアとそれに渡されたオプションにアクセスでき、そこからストア ID を確認して、以下に示すように特定のストアのみを返すことができます
リーリー私は 3 つのストアを使用して非常に基本的な例を作成しました。上記のチェックは codesandbox で利用できます ここ < /a>