Mengurangkan kod boilerplate dalam API Komposisi Vue 3: memudahkan pelaksanaan penghala dan storan
P粉281089485
P粉281089485 2023-08-29 18:19:32
0
1
473
<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粉281089485
P粉281089485

membalas semua(1)
P粉436052364

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>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan