如何在 vue 3 中使用 vuex 模块
How to use vuex modules in vue 3
我有一个 vue 3 (Javascript) 项目。尝试将我的 vuex 存储拆分为模块,但我不断收到错误 [vuex] unknown getter: loginToken
。据我了解,vuex 4.0.0-beta
的唯一 [主要] 变化是导入语句。如何使用模块应该还是一样的吧?
store/index.js
import { createStore } from 'vuex';
import * as auth from "./modules/auth";
const store = createStore({
modules: {
auth,
},
state: {
....
},
getters: {
...
},
mutations: {
...
},
actions: {
...
}
})
store/modules/auth.js
import firebase from "./../../firebase";
const state = {
loginToken: null,
}
const getters = {
loginToken({ loginToken }) {
return loginToken;
},
}
const mutations = {
loginToken(state, token) {
if(token) {
state.loginToken = token;
} else {
state.loginToken = null;
}
}
}
const actions = {
login(context, request) {
return new Promise((resolve, reject) => {
firebase.auth().signInWithEmailAndPassword(request.email, request.password)
.then(({ user }) => {
context.dispatch("getUserProfile", user.uid).then(() => {
context.commit("loginToken", user.uid);
resolve(user.uid);
});
}).catch(function(error) {
reject(error)
});
})
}
}
export default { state, getters, mutations, actions }
Page.vue
<template>
<ion-header>
<ion-toolbar>
<ion-buttons slot="secondary">
<ion-button @click="gotoProfile" v-if="loginToken">Profile</ion-button>
<ion-button @click="logout" v-if="loginToken">Logout</ion-button>
</ion-buttons>
<ion-buttons>
</ion-buttons>
<ion-title class="logo" @click="gotoHome">{{ name }} </ion-title>
</ion-toolbar>
</ion-header>
</template>
<script>
import { mapGetters } from 'vuex';
....
computed: {
...mapGetters(['loginToken']),
},
...
</script>
Vue.js3 中的导入需要像这样:
import auth from "./modules/auth";
但你把它当作:
import * as auth from "./modules/auth";
我有一个 vue 3 (Javascript) 项目。尝试将我的 vuex 存储拆分为模块,但我不断收到错误 [vuex] unknown getter: loginToken
。据我了解,vuex 4.0.0-beta
的唯一 [主要] 变化是导入语句。如何使用模块应该还是一样的吧?
store/index.js
import { createStore } from 'vuex';
import * as auth from "./modules/auth";
const store = createStore({
modules: {
auth,
},
state: {
....
},
getters: {
...
},
mutations: {
...
},
actions: {
...
}
})
store/modules/auth.js
import firebase from "./../../firebase";
const state = {
loginToken: null,
}
const getters = {
loginToken({ loginToken }) {
return loginToken;
},
}
const mutations = {
loginToken(state, token) {
if(token) {
state.loginToken = token;
} else {
state.loginToken = null;
}
}
}
const actions = {
login(context, request) {
return new Promise((resolve, reject) => {
firebase.auth().signInWithEmailAndPassword(request.email, request.password)
.then(({ user }) => {
context.dispatch("getUserProfile", user.uid).then(() => {
context.commit("loginToken", user.uid);
resolve(user.uid);
});
}).catch(function(error) {
reject(error)
});
})
}
}
export default { state, getters, mutations, actions }
Page.vue
<template>
<ion-header>
<ion-toolbar>
<ion-buttons slot="secondary">
<ion-button @click="gotoProfile" v-if="loginToken">Profile</ion-button>
<ion-button @click="logout" v-if="loginToken">Logout</ion-button>
</ion-buttons>
<ion-buttons>
</ion-buttons>
<ion-title class="logo" @click="gotoHome">{{ name }} </ion-title>
</ion-toolbar>
</ion-header>
</template>
<script>
import { mapGetters } from 'vuex';
....
computed: {
...mapGetters(['loginToken']),
},
...
</script>
Vue.js3 中的导入需要像这样:
import auth from "./modules/auth";
但你把它当作:
import * as auth from "./modules/auth";