从另一个模块访问状态

我想从 records_view.js访问 instance.js中的 state.session。这是如何完成的?

Store/module/instance.js

const state = {
// This is what I want to access in records_view.js
session: {}
};


const getters = {
sessionGetter: state => state.session
};

Store/module/record _ view. js

const actions = {
getSettingsAction (context, props) {
// This is how I'm trying to access session, which doesn't work
let session = context.state.instance.session;


Api(
context,
{
noun: props.noun,
verb: 'GetRecordsViewSettings',
orgUnitKey: _.has(session, 'orgunit.key') ? session.orgunit.key : '',
data: {}
},
props.callback
);
}
};

这是为了增加一点上下文。

Store/index.js

import Vue from 'vue';
import Vuex from 'vuex';
import * as actions from './actions';
import * as getters from './getters';
import * as types from './mutation-types';


import instance from './modules/instance';
import recordsView from './modules/records_view';


Vue.use(Vuex);


export default new Vuex.Store({
state,
actions,
getters,
mutations,
modules: {
instance,
recordsView
}
});
117866 次浏览

您需要在您的状态中定义 session,如下所示,以便在您的 获得者中访问它:

const state = {
session: ''
}

您必须编写一个 变异,它将从您的操作中调用来设置这个状态值。

在访问其他模块的状态时,应该使用 state引用本地状态和 rootState

let session = context.rootState.instance.session;

文件: https://vuex.vuejs.org/en/modules.html

从一个动作:

'contacts:update' ({ commit, rootState }) {
console.log('rootState', rootState.users.form)
......


},

对我来说,我有 vuex 模块,但需要一个突变,以更新 STATE 在一个不同的文件。能够通过添加此

即使在模块中,您也可以通过 console.log (this. state)看到您可以访问的全局状态

const mutations = {
MuteChangeAmt(state, payload) {
//From user module; Need THIS keyword to access global state
this.state.user.payees.amount = payload.changedAmt;
}
}

对我来说,就是这样。

在 ModuleA.js 文件中:

export const state = {
parameterInA: 'A'
}
export const action = {
showParameterB() {
console.log("Parameter B is: " + this.state.B.parameterInB)
}

文件模块 B:

export const state = {
parameterInB: 'B'
}


export const action = {
showParameterA() {
console.log("Parameter A is: " + this.state.A.parameterInA)
}

您需要在 index.js 中导入 ModuleA & B 作为根目录:

import * as A from 'ModuleA.js'
import * as B from 'ModuleB.js'

这样,状态参数可以在子模块中交叉引用。

this.$store.state.instance.session

其中“ instance”是模块名,“ session”是您试图访问的 Vuex 状态变量。

假设你有两个模块: 模块 A模块 B

如果要从 模块 B访问 模块 A状态,可以执行以下操作:

// inside ModuleB (where there is stateA in ModuleA)
getters: {
getStateA(state, _, rootState) {
return rootState.ModuleA.stateA;
},
},

你可以使用 rootGettersrootState

actions中,上下文有 rootGettersrootState

contexts.rootState.instance.session;
contexts.rootGetters["instance/session"];