我剛開始使用Vue3,並嘗試使用vuex來管理狀態。使用 Vue2 時,每次應用程式載入時我都會呼叫商店,如下所示:
// 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"); }, });
這是我的 vuex 存儲,它定義了 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: {} }
此檔案管理本機儲存的 cookie,該 cookie 儲存 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); }
但是在 Vue3 中我正在建立這樣的 main.js 檔案:
// 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')
如何將管理商店的兩個呼叫加入到 createApp 函數中?
您可以使用
extends
選項將created
掛鉤新增到根元件 a> 帶有元件定義:示範