访问js文件中的vuex存储

Ele*_*ova 11 javascript vue.js vuex

就像在main.js中一样,我正在尝试从帮助函数文件访问我的商店:

import store from '../store'

let auth = store.getters.config.urls.auth
Run Code Online (Sandbox Code Playgroud)

但是它记录了一个错误:

未捕获的TypeError:无法读取未定义的属性"getters".

我试过了

this.$store.getters.config.urls.auth
Run Code Online (Sandbox Code Playgroud)

结果相同.

商店:

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

Vue.use(Vuex);

const store = new Vuex.Store({
    state: {
        config: 'config',

    },
    getters: {
        config: state => state.config
    },
});

export default store
Run Code Online (Sandbox Code Playgroud)

如何在组件外部使用我的商店?

Paw*_*cki 15

以下对我有用:

import store from '../store'

store.getters.config
// => 'config'
Run Code Online (Sandbox Code Playgroud)

  • 商店未定义 (3认同)
  • 这对我有用。刚刚在我的仓库上尝试过。是的,如果您访问 Vue 之外的 store,则必须使用“getters”。 (2认同)
  • 是的,只要看看它,它应该可以工作,但是由于一些非常奇怪的原因它不起作用。 (2认同)

小智 10

如果您使用命名空间模块,您可能会遇到与我在尝试从商店检索项目时遇到的相同困难;

可能对您有用的是在调用 getter 时指定名称空间(示例如下)

import store from '../your-path-to-your-store-file/store.js'

console.log(store.getters.['module/module_getter']);

// for instance

console.log(store.getters.['auth/data']);
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用:store.getters['auth/data']。getter 之后没有“句点” (4认同)

Gra*_*zer 6

这在 2021 年对我有用

我尝试了很多不同的东西,似乎,至少在 Vue 3 中,这是有效的。这是一个示例商店:

export default {
  user: {
    bearerToken: 'initial',
  },
};
Run Code Online (Sandbox Code Playgroud)

这是我的Getters文件:

export default {
  token: (state) => () => state.user.bearerToken,
};
Run Code Online (Sandbox Code Playgroud)

在您的.js文件中,将页面添加到您的store\index.js文件中。

import store from '../store';
Run Code Online (Sandbox Code Playgroud)

为了访问 getter 只需记住它是一个函数(当您使用mapGetters.)

console.log('Checking the getters:', store.getters.token());
Run Code Online (Sandbox Code Playgroud)

状态更直接:

console.log('Checking the state:', store.state.user.bearerToken);
Run Code Online (Sandbox Code Playgroud)