Reputation: 3762
I have a vue 3 (Javascript) project. Trying to split my vuex store to modules but I keep getting the error [vuex] unknown getter: loginToken
. As far as I understand the only [major] change with vuex 4.0.0-beta
is the import statement. How one uses modules should still be the same?
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>
Upvotes: 3
Views: 5806
Reputation: 103
imports in Vue.js 3 need to be like this:
import auth from "./modules/auth";
but you have it as:
import * as auth from "./modules/auth";
Upvotes: 4