suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Vue3 – Behalten Sie den Status durch Seitenaktualisierung bei

Ich habe gerade angefangen, Vue3 zu verwenden und zu versuchen, Vuex zum Verwalten des Status zu verwenden. Wenn ich Vue2 verwende, rufe ich den Store jedes Mal auf, wenn die App geladen wird, so:

// 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");
    },
});

Dies ist mein Vuex-Shop, der die Zustände, Mutationen und Operationen von Vuex definiert:

// 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: {}
}

Diese Datei verwaltet ein lokal gespeichertes Cookie, das den booleschen Wert von isLoggedIn speichert:

// auth.js
export function isLoggedIn() {
    return localStorage.getItem("isLoggedIn") == 'true';
}

export function logIn() {
    localStorage.setItem("isLoggedIn", true);
}

export function logOut() {
    localStorage.setItem("isLoggedIn", false);
}

Aber in Vue3 erstelle ich eine main.js-Datei wie folgt:

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

Wie füge ich die beiden Aufrufe zur Verwaltung des Stores zur Funktion createApp hinzu?

P粉959676410P粉959676410245 Tage vor481

Antworte allen(1)Ich werde antworten

  • P粉327903045
  • StornierenAntwort