Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同模块突变中的访问根状态_Javascript_Vue.js_Vuejs2_Vuex - Fatal编程技术网

Javascript 不同模块突变中的访问根状态

Javascript 不同模块突变中的访问根状态,javascript,vue.js,vuejs2,vuex,Javascript,Vue.js,Vuejs2,Vuex,我有几个vuex模块。为了简单起见,我将用我所面临的一个例子来解释我的问题: 我有两个vuexmodulesfirstModule.js和secondModule.js firstModule.js有一个myArray[]处于其状态: //firstModule const state = { myArray: [//has some items] } 在secondModule.js中,我有一个从外部API异步获取一些数据的操作 此操作提交一个变异,该变异应搜索所获取的数据是否存

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

我有两个
vuex
modulesfirstModule.jssecondModule.js

firstModule.js有一个
myArray[]
处于其状态:

//firstModule

const state = {
    myArray: [//has some items]
} 
secondModule.js中,我有一个从外部API异步获取一些数据的操作

此操作提交一个变异,该变异应搜索所获取的数据是否存在于firstModule的
myArray[]

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}
    }
}
  • 如果提取的数据存在于第一个模块的
    myArray[]
    中,则将其添加到第二个模块的
    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}
        }
    }
    
但问题是:

  • 根据模块中的突变不能访问根状态,只有操作和getter才能访问根状态

  • 如果无法访问突变中的rootAtate,我如何执行上述逻辑

  • 我是否必须访问操作中的根状态,并将其作为有效负载传递给已提交的突变


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

操作是逻辑代码应该运行的地方,以确定是否进行突变。您可以在
fetchData
操作中检查第一个模块的
myArray
。这是最好的做法

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