Rumah  >  Soal Jawab  >  teks badan

Kaedah untuk mendapatkan rujukan kepada kedai Pinia semasa: operasi gabungan dinamik

<p>Ini adalah "kira-kira" yang saya mahukan: </p> <pre class="brush:php;toolbar:false;">// Ini ialah fungsi boleh gubah umum: fungsi eksport useGeneric() { function genericAct(){ const store = getCurrentStore(); // Inilah yang saya perlukan nilai kedai.a. = 42; store.act2(); // Tindakan ini harus dilaksanakan menggunakan fungsi biasa dalam stor } pulangkan {genericAct} } // Berikut ialah contoh kedai yang menggunakannya export const useMyStore = defineStore('myStore', () => { const a = ref(1); const b = ref(1); const {genericAct} = useGeneric(); fungsi act2(){ b.nilai = 43; } kembalikan {a, b, genericAct, act2}; }</pre> <p>Bagaimanakah saya boleh mendapatkan storan yang terikat dengan tindakan ini? (Atau bagaimana untuk menyampaikannya sebagai hujah untuk <code>useGeneric</code>?)</p> <p>(Sudah tentu, ini hanyalah contoh paling mudah. ​​Dalam aplikasi praktikal, saya akan menggunakan ini untuk melakukan perkara yang lebih berguna...)</p>
P粉195200437P粉195200437406 hari yang lalu489

membalas semua(1)saya akan balas

  • P粉106715703

    P粉1067157032023-08-15 12:45:05

    Saya tidak tahu sama ada ini cara terbaik, anda juga boleh mempertimbangkan ulasan @Estus Flask:

    Tetapi saya akhirnya memilih untuk lulus useMyStore sebagai parameter.

    Perhatikan bahawa ia harus dipanggil dalam setiap operasi generik kerana pada masa useGeneric() dilaksanakan, stor belum lagi dibuat.

    Berikut ialah contoh kod:

    // 这是一个通用的可组合函数:
    function export useGeneric(getStore:any) { // 这里的类型定义非常困难,也许使用接口来避免使用 any 是最好的解决方案
      function genericAct(){
        const store = getStore(); // 这就是我需要的
        store.a.value = 42;
        store.act2(); // 这个操作应该在 store 中使用泛型来实现
      }
      return {genericAct}
    }
    
    // 这是一个使用它的示例 store
    export const useMyStore = defineStore('myStore', () => {
      const a = ref(1);
      const b = ref(1);
      const {genericAct} = useGeneric(useMyStore);
      function act2(){
        b.value = 43;
      }
      return {a, b, genericAct, act2};
    }

    balas
    0
  • Batalbalas