如何在 Vuex 商店模块状态中访问“this”

Posted

技术标签:

【中文标题】如何在 Vuex 商店模块状态中访问“this”【英文标题】:How to access 'this' in Vuex store module state 【发布时间】:2018-05-19 01:40:04 【问题描述】:

例如,假设我有一个这样的“商店”目录:

...
store
├── auth
│   └── user.js
└── index.js
...

index.js

import Vue from 'vue';
import Vuex from 'vuex';
import user from './auth/user';

Vue.use(Vuex);

/* eslint-disable no-new */
const store = new Vuex.Store(
  modules: 
    user
  ,
);

export default store;

现在在user 商店中,我的state 属性中有一些常量和其他状态变量。如何从自身内部访问 state 道具?例如user 商店可能如下所示:

user.js

export const user = 
  namespaced: true,

  state: 

    // hardcoded string assigned to user.state.constants.SOME_CONST
    constants: 
      SOME_CONST: 'testString'
    ,

    // Another property where I would like to reference the constant above

    someOtherStateProp: 

      // Trying to access the constant in any of these ways throws
      // 'Uncaught ReferenceError: .... undefined'
      // Where '...' above is interchangeable with any root I try to access the constant from (this, state etc)

      test1: this.state.constants.SOME_CONST,
      test2: user.state.constants.SOME_CONST
      test3: state.constants.SOME_CONST
      test4: constants.SOME_CONST
      test5: SOME_CONST
      // .... etc. All the above throw ReferenceError's 
    
  
;

如何从user.state.someOtherStateProp.test1 引用user.state.constants.SOME_CONST

感觉我在这里遗漏了一些非常基本的东西。

【问题讨论】:

你想在任何组件中访问这些常量 @VamsiKrishna,是的,目前这不是问题。在组件computed props 中映射状态后,我可以在组件中正常访问它们 【参考方案1】:

最简单的方法是在导出模块之前声明CONSTANTS 对象并按如下方式访问它们

const CONSTANTS = 
    SOME_CONST: 'testString'


export const user = 
  namespaced: true,

  state: 

    // hardcoded string assigned to user.state.constants.SOME_CONST
    constants: CONSTANTS,

    // Another property where I would like to reference the constant above

    someOtherStateProp: 


      test1: CONSTANTS.SOME_CONST,
    
  
; 

【讨论】:

【参考方案2】:

您可以分两步完成此操作。

let user = 
    namespaced: true,
    state: 
        SOME_CONST: 'testString'
    
;

Object.assign(user, 
    state: 
        someOtherStateProp: 
            test1: user.state.SOME_CONST
        
    
);

export default user;

在此处阅读有关Object.assign 的更多信息 - https://developer.mozilla.org/en/docs/Web/javascript/Reference/Global_Objects/Object/assign

【讨论】:

以上是关于如何在 Vuex 商店模块状态中访问“this”的主要内容,如果未能解决你的问题,请参考以下文章

如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?

如何使用 Nuxt 和 Jest 在 Vuex 商店测试中访问 this.app 和/或注入插件

如何从组件访问 Vuex 模块操作

如何在 Nuxt 中从另一个访问一个 Vuex 状态?

Vue/Nuxt:如何在 vuex 商店中访问 Nuxt 实例?

在 NUXT 中使用 vue-apollo 从 Vuex 商店访问 this.$apollo?