在不同模块的突变中访问rootState

Vam*_*hna 5 javascript vue.js vuex vuejs2

我有几个vuex模块。为了简单起见,我将以一个我所面临的例子来说明我的问题:

我有2个vuex模块firstModule.jssecondModule.js

firstModule.jsmyArray[ ]它的状态:

//firstModule

const state = {
    myArray: [//has some items]
} 
Run Code Online (Sandbox Code Playgroud)

secondModule.js中,我有一个动作,该动作可以从外部API异步获取一些数据。

此操作会产生一个突变,该突变应搜索firstModule的是否存在获取的数据 myArray[ ]

  • 如果获取的数据存在于firstModule的中 myArray[ ],则将其添加到secondModule的 newArray[ ]

    const state = {
        newArray: []
    }
    
    const mutations = {
        addToNewArray: (state, payload) => {
            function findIyem(value){
                return value === payload.data;
            };    
    
            var item = payload.rootData.myArray.find(findItem);
            state.newArray.push(payload.data);
        }
    }
    
    const actions = {
        fetchData: ({commit, rootState}) => {
            // fetches some data from external API
            var fetched data = data // data is which I received from fetching
    
            commit('addToAnotherArray', {data: data, rootData: rootState.firstModule.myArray}
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

但是,这是问题所在:

  • 根据文档,模块中的突变无法访问rootState,只有操作和获取者才能访问rootState

  • 在突变中无法访问rootAtate时,如何执行上述逻辑?

  • 我是否需要上述操作一样访问操作中的rootState并将其作为有效负载传递给已提交的变异?

tha*_*ksd 7

根据我的经验,vuex模块中的突变应该以其描述的方式直接影响模型。因此,您的addToNewArray方法应该简单地将有效负载数据添加到状态的newArray属性中。

操作是您的逻辑代码应该运行的地方,以确定是否进行更改。你可以检查你的firstModule的myArray的范围内fetchData行动。这是最好的做法。

但是,如果您确实需要访问rootState突变中的变量,则必须像当前一样将其作为变量引用传入。