Проблема импорта геттеров в маршрутизатор - Vuex - PullRequest
0 голосов
/ 18 мая 2019

Проблема импорта геттеров в Rotate - Vuex.

Я пытаюсь импортировать значение, находящееся в состоянии vuex.

Сообщается об ошибке, указывающей, что она не определена.

Понятия не имею, что я мог сделать неправильно.Пожалуйста, если кто-нибудь может помочь, я буду очень признателен.

Спасибо за прослушивание

Ошибка TypeError: "_store__WEBPACK_IMPORTED_MODULE_4 __. Default.getters не определена"

Store

import Vue from 'vue'
import Vuex from 'vuex'
import auth from './module-auth'

Vue.use(Vuex)
export default function () {
  const Store = new Vuex.Store({
    modules: {
      auth
    },
    strict: process.env.DEV
  })
  return Store
}

module-auth Getters

import decode from 'jwt-decode'

function isTokenExpired (state) {
  try {
    const decoded = decode(state.token)
    if (decoded.exp < Date.now() / 1000) {
      return true
    } else return false
  } catch (err) {
    return false
  }
}
export {
  isTokenExpired,
}

Маршрутизатор

import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '../store'

Vue.use(VueRouter)

export default function () {
  const Router = new VueRouter({
    scrollBehavior: () => ({ x: 0, y: 0 }),
    routes,
    mode: process.env.VUE_ROUTER_MODE,
    base: process.env.VUE_ROUTER_BASE
  })

  Router.beforeEach((to, from, next) => {
    const publicPages = ['/']
    const authRequired = !publicPages.includes(to.path)

    const loggedIn = store.getters['auth/isTokenExpired']
    console.log(loggedIn)

    if (authRequired && !loggedIn) {
      return next('/')
    }
    next()
  })
  return Router
}

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Экспорт функции, которая создает магазин и использует его как функцию, создаст много магазинов и не нужен.

Поскольку вам нужно использовать один экземпляр магазина в любом месте, вам нужно экспортировать экземпляр магазина, а не функцию, которая создает магазин.

1 голос
/ 19 мая 2019

Ваша ошибка в том, что вы пытаетесь использовать функцию в качестве модуля Vuex. Модуль должен быть объектом. Документы говорят:

export const moduleA = {
  state: { count: 0 },
  mutations: {
    increment(state) {
      state.count++;
    }
  },

  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  }
};

И ваша функция isTokenExpired выглядит так, как будто она должна быть помещена в секцию "getts".

...