Перемещение хранилища Nuxt в режим модулей приводит к ошибке 'getters should be function' - PullRequest
0 голосов
/ 27 марта 2020

Поскольку режим classi c скоро устареет, я пытаюсь перевести свой магазин в режим модулей. Однако я хочу сохранить состояние, действия, мутации и геттеры в отдельных файлах. Допустим, в настоящее время у меня только один модуль - аутентификация. Это структура моего магазина:

store
 |_ modules
 |  |_auth
 |    |_actions.js
 |    |_getters.js
 |    |_mutations.js
 |    |_state.js
 |
 |_actions.js
 |_auth.js
 |_getters.js
 |_index.js
 |_mutations.js
 |_state.js

store\modules\auth\state.js в настоящее время имеет только одно свойство:

export const state = () => {
  return {
    token: null
  }
}

Это store\modules\auth\getters.js

export const getters = {
  isAuthenticated(state) {
    return !!state.token
  }
}

Тогда в моем store\auth.js:

import {actions} from './modules/auth/actions'
import {getters} from './modules/auth/getters'
import {mutations} from './modules/auth/mutations'
import {state} from './modules/auth/state'

export {
  actions,
  getters,
  mutations,
  state
}

И, наконец, в моем store\index.js У меня есть только этот код:

export default {
  namespaced: true,
  strict: true
}

Это дает мне следующую ошибку: [vuex] getters should be function but "getters.getters" in module "modules.auth" is {}.

Я часами чесал голову и не знаю, как с этим справиться.

Я пытался сделать что-то подобное, например:

export const getters = () => {
  return {
    isAuthenticated: state => !!state.token
  }
}

Это скомпилировалось, но в консоли он выдал другую ошибку: [vuex] unknown getter: auth/isAuthenticated

И это также дает мне это предупреждение: store/modules/auth/state.js should export a method that returns an object

И там я думал, что я делаю это ...

Есть идеи, пожалуйста?

1 Ответ

1 голос
/ 27 марта 2020

Наконец-то удалось ее решить. Может быть, кто-то найдет это полезным.

Прежде всего, мой экспорт геттеров был неправильным. Это правильный способ сделать это:

export default {
  isAuthenticated(state) {
    return !!state.token
  }
}

То же самое в отношении состояния:

export default () => ({
  token: null
})

А затем мне пришлось переместить модуль auth из modules в папку находиться в папке store. Я также удалил файлы index.js и auth.js.

store
 |_auth
 | |_actions.js
 | |_getters.js
 | |_mutations.js
 | |_state.js
 |
 |_actions.js
 |_getters.js
 |_mutations.js
 |_state.js

Теперь все отлично работает!

...