Rumah  >  Soal Jawab  >  teks badan

Mengurangkan kod boilerplate dalam API Komposisi Vue 3: memudahkan pelaksanaan penghala dan storan

<p>Menggunakan API Komposisi Vue 3, setiap paparan memerlukan kod berikut: </p> <pre class="brush:js;toolbar:false;">import { useRouter, useRoute } daripada 'vue-router' import { useStore } daripada 'vuex' eksport lalai { persediaan() { penghala const = useRouter() kedai const = useStore() // ... } } </pra> <p>Adakah terdapat cara untuk mengisytiharkannya sekali semasa membuat aplikasi dan kemudian menyerahkannya kepada aplikasi yang dibuat dan hanya menggunakannya dalam paparan aplikasi tanpa memerlukan pengisytiharan ini? Dalam vue2, ini diluluskan apabila aplikasi dimulakan, dan kemudian <code>this.$store</code> </p> <p>Idea untuk menggunakan pembolehubah global, yang boleh menyebabkan masalah dengan mudah: dalam <code>app.vue</code> <pre class="brush:js;toolbar:false;">import { useStore } daripada 'vuex' eksport lalai { persediaan() { globalthis.store = useStore() </pra> <p>Kemudian <code>store</code> akan tersedia di mana-mana sahaja. </p>
P粉281089485P粉281089485416 hari yang lalu453

membalas semua(1)saya akan balas

  • P粉436052364

    P粉4360523642023-08-30 14:44:15

    dalamsetup()中,组件实例不可用,因为组件尚未创建,所以在Composition API中没有this上下文可用于使用this.$store.

    Saya memikirkan setup()中使store/router变量可用的唯一方法而不需要其他导入是将它们作为全局变量附加到window/globalThis (mengabaikan sekatan pembolehubah global):

    // router.js
    import { createRouter } from 'vue-router'
    export default createRouter({/*...*/})
    
    // store.js
    import { createStore } from 'vuex'
    export default createStore({/*...*/})
    
    // main.js
    import router from './router'
    import store from './store'
    
    window.$router = router
    window.$store = store
    

    Sila ambil perhatian bahawa dalam API Pilihan dan templat, anda masih boleh menggunakan $store$router untuk mengakses kedai dan penghala Untuk contoh khusus, sila rujuk contoh dalam API Pilihan dan Templat Vuex 4 dan Vue 4:

    <template>
      <div>{{ $store.state.myProp }}</div>
      <button @click="$router.back()">返回</button>
    </template>
    
    <script>
    export default {
      mounted() {
        console.log(this.$store.state.myProp)
        console.log(this.$router.currentRoute)
      }
    }
    </script>
    

    balas
    0
  • Batalbalas