Maison > Questions et réponses > le corps du texte
Je viens de commencer à utiliser Vue3 et j'essaie d'utiliser vuex pour gérer l'état. Lorsque j'utilise Vue2, j'appelle le magasin à chaque fois que l'application se charge comme ceci :
// mains.js import VueRouter from "vue-router"; import Vuex from "vuex"; import router from "./routes"; window.Vue = require('vue').default; Vue.use(VueRouter); Vue.use(VueMoment); Vue.use(Vuex); const store = new Vuex.Store(storeDefinition); const app = new Vue({ el: '#app', router, store, components: { "index": Index }, async created() { this.$store.dispatch("loadStoredState"); this.$store.dispatch("loadUser"); }, });
Voici ma boutique vuex, qui définit les états, mutations et opérations de vuex :
// store.js import { isLoggedIn, logOut } from "./shared/utils/auth"; export default { state: { isLoggedIn: false, user: {} }, mutations: { setUser(state, payload) { state.user = payload; }, setLoggedIn(state, payload) { state.isLoggedIn = payload; } }, actions: { loadStoredState(context) { context.commit("setLoggedIn", isLoggedIn()); }, async loadUser({ commit, dispatch }) { if (isLoggedIn()) { try { const user = (await axios.get("/user")).data; commit("setUser", user); commit("setLoggedIn", true); } catch (error) { dispatch("logout"); } } }, logout({ commit }) { commit("setUser", {}); commit("setLoggedIn", false); logOut(); } }, getters: {} }
Ce fichier gère un cookie stocké localement qui stocke la valeur booléenne de isLoggedIn :
// auth.js export function isLoggedIn() { return localStorage.getItem("isLoggedIn") == 'true'; } export function logIn() { localStorage.setItem("isLoggedIn", true); } export function logOut() { localStorage.setItem("isLoggedIn", false); }
Mais dans Vue3, je crée un fichier main.js comme celui-ci :
// mains.js const { createApp } = require('vue') import Index from './Index.vue' import createRouter from './router' import { createStore } from 'vuex' import storeDefinition from "./store"; const store = createStore(storeDefinition) createApp(Index) .use(createRouter()) .use(store) .mount('#app')
Comment ajouter les deux appels de gestion de la boutique à la fonction createApp ?
P粉3279030452024-03-26 12:31:33
Vous pouvez utiliser le hook extends
选项将 created
ajouté au composant racine a> avec la définition du composant :
// main.js import { createApp } from 'vue' import Index from './Index.vue' import createRouter from './router' import { createStore } from 'vuex' import storeDefinition from './store' const store = createStore(storeDefinition) createApp({ extends: Index, created() { this.$store.dispatch('loadStoredState') this.$store.dispatch('loadUser') }, }) .use(createRouter()) .use(store) .mount('#app')