我试图将从Firebase返回的accessToken存储到我的Vuex项目中的Vuex存储中,当我运行这段代码时,我得到以下错误。
Uncaught TypeError: 无法读取未定义的属性'$store'。
在下面的代码中,它似乎没有接收到store.js,有什么想法,为什么会这样?
谢谢你
登录.vue
mounted: function() {
Firebase.auth.onAuthStateChanged( user => {
if (user) {
user.getIdToken().then(function(idToken) {
this.$store.commit('setStoreToken', idToken)
return idToken
});
}
else {
.
.
.
}
store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
loggedIn: false,
accessToken: '',
},
mutations: {
loggedIn () {
this.state.loggedIn = true
},
loggedOut () {
this.state.loggedIn = false
},
setStoreToken(state, accessToken) {
state.accessToken = accessToken
},
},
getters: {
getAccessToken: state => {
return state.accessToken
}
},
})
主.js
import store from './store.js'
new Vue({
store,
router,
render: h => h(App),
}).$mount('#app')
我的猜测是:你没有使用箭头函数。
user.getIdToken().then(function(idToken) {
this.$store.commit('setStoreToken', idToken)
return idToken
});
你没有使用一个箭头函数,这意味着 this
绑定到函数本身,你可以使用一个箭头函数,或者像这样在它前面创建一个变量 const self = this
user.getIdToken().then((idToken)=>{
this.$store.commit('setStoreToken', idToken)
return idToken
});
或者你这样做。
const self = this;
user.getIdToken().then(function(idToken) {
self.$store.commit('setStoreToken', idToken)
return idToken
});