Reduzierung des Boilerplate-Codes in der Vue 3 Composition API: Vereinfachung der Router- und Speicherimplementierung
P粉281089485
P粉281089485 2023-08-29 18:19:32
0
1
458
<p>Bei Verwendung der Composition API von Vue 3 benötigt jede Ansicht den folgenden Code: </p> <pre class="brush:js;toolbar:false;">import { useRouter, useRoute } from 'vue-router' importiere { useStore } aus 'vuex' Standard exportieren { aufstellen() { const router = useRouter() const store = useStore() // ... } } </pre> <p>Gibt es eine Möglichkeit, sie beim Erstellen der Anwendung einmal zu deklarieren und sie dann an die erstellte Anwendung zu übergeben und sie einfach in der Anwendungsansicht zu verwenden, ohne dass diese Deklarationen erforderlich sind? In vue2 werden diese übergeben, wenn die Anwendung initialisiert wird, und dann funktioniert <code>this.$store</code> / <code>this.$router</code> </p> <p>Eine Idee, globale Variablen zu verwenden, die leicht zu Problemen führen können: In <code>app.vue</code> können Sie sie einmal so deklarieren: </p> <pre class="brush:js;toolbar:false;">import { useStore } from 'vuex' Standard exportieren { aufstellen() { globalthis.store = useStore() </pre> <p>Dann ist <code>store</code> überall verfügbar. </p>
P粉281089485
P粉281089485

Antworte allen(1)
P粉436052364

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

我认为在setup()中使store/router变量可用的唯一方法而不需要其他导入是将它们作为全局变量附加到window/globalThis上(忽略全局变量的限制):

// 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

请注意,在Options API中和模板中,仍然可以使用$store$router访问store和router,具体示例可参考Options API模板中的示例,对于Vuex 4和Vue Router 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>
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!