beforeRouteEnter函数和Vuex问题

beforeRouteEnter function and Vuex problem

在quasar项目中,我有一个Vuex函数“asyncValidateToken”,用于检查用户是否登录到系统。它位于文件“src/store/index.js”中。该文件包含以下代码:

import Vue from 'vue'
import Vuex from 'vuex'

import { api } from 'boot/axios'

Vue.use(Vuex)

export default function (/* { ssrContext } */) {
  const Store = new Vuex.Store({
    state: {
      isLogin: false
    },
    mutations: {
      changeIsLogin (state, payload) {
          state.isLogin = payload;
      }
    },
    actions: {
      asyncValidateToken: async (context, payload) => {
        await api.post('/accounts/token', '', {
          headers: {
              'Authorization': `Bearer ${localStorage.token}`,
            }
        })
        .then(response => {
          if (response.data == localStorage.userId) {
              context.commit('changeIsLogin', true);
              return true;
          } else {
              context.commit('changeIsLogin', false);
              return false;
          }
        })
        .catch(error => {
          context.commit('changeIsLogin', false);
          return false;
        });
      }
    }
  })

  return Store
}

通过函数“beforeRouteEnter”使用路由保护的页面“Results.vue”

<template>
  <q-page class="flex flex-center">
    <div>
      <charts />
      <feedback />
    </div>
  </q-page>
</template>


<script>
import Charts from 'src/components/Charts.vue'
import Feedback from 'src/components/Feedback.vue'
import store from 'src/store/index.js'

export default {
  name: 'Results',
  components: {
    Charts,
    Feedback
  },
  beforeRouteEnter (to, fromR, next) {
    if (store.dispatch('asyncValidateToken')) { 
      next();
    } else { this.$router.push('/login'); }
  }
}
</script>

我得到一个错误“src_store_index_js__WEBPACK_IMPORTED_MODULE_2__.default.dispatch 不是一个函数 在 beforeRouteEnter (Results.vue?82a0:23) 在routeEnterGuard (vue-router.esm.js?85f8:2333)”。构造“this.$store.dispatch('asyncValidateToken')”也不起作用。为什么?

尝试

store().dispatch('')

为什么?

因为您的 store.js 模块默认导出一个函数,它 returns 商店。