Saya mempunyai beberapa kedai Pinia yang sepatutnya berkongsi satu set operasi dan pengambil, tetapi saya tidak pasti bagaimana untuk mencapainya dengan cekap.
Saya sedang membina aplikasi yang membolehkan pengguna mengurus pelbagai media (buku, filem, rancangan TV, dll.). Cara yang saya fikirkan pada masa ini ialah untuk mempunyai kedai untuk setiap jenis media, seperti Kedai Buku, MovieStore, dsb. Banyak pengambil dan operasi (seperti count
和 deleteOne
) adalah betul-betul sama antara kedai yang berbeza ini.
Bagaimana untuk melaksanakan DRY di sini? Contoh dalam dokumentasi Pinia menumpukan pada penggunaan semula tindakan dan pengambil dalam kedai lain, tetapi saya tidak fikir ini menangani sepenuhnya kes penggunaan saya yang mewarisi secara langsung satu set pengambil dan penetap.
Adakah pendekatan pewarisan yang saya cuba di sini adalah anti-corak?
Jika anda mahu beberapa fungsi dikongsi di bukan semua kedai, anda boleh menggunakan boleh gubah.
Anda boleh mencipta fungsi boleh gubah yang berasingan dan menghantar sebahagian daripada contoh kedai ke dalamnya.
Saya buat contoh untuk anda di kotakdandbox.
Berikut ialah contoh ringkas codesandbox:
common.ts
Kemudian di mana-mana kedai anda boleh menggunakannya seperti ini:
fooStore.ts
Dengan cara ini anda boleh mengarang sebarang fungsi, objek, dsb. dalam mana-mana storan atau dalam mana-mana komponen.
Ini boleh dicapai menggunakan pemalam docs
Contoh filem:
Anda mempunyai berbilang kedai, setiap negeri menggunakan skema penamaan yang dikongsi:
Setiap kedai akan mempunyai operasi CRUD yang sama, cuma URL berubah
Buat pemalam:
Sediakan pemalam untuk Pinia:
Contoh movieStore.js (menggunakan tindakan dan keadaan yang dikongsi)
Contoh penggunaan dalam komponen
Editor: 1
Jika anda menghantar konteks ke dalam pemalam, anda boleh mengakses kedai dan pilihan yang dihantar ke dalamnya, yang mana anda boleh menyemak ID kedai dan hanya mengembalikan kedai tertentu seperti yang ditunjukkan di bawah
Saya mencipta contoh yang sangat asas menggunakan 3 kedai, cek di atas tersedia dalam kotak pasir kod di sini