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



我有几个vuex模块。为简单起见,我将以我面临的示例来解释我的问题:

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

firstModule.js 具有myArray[ ]的状态:

//firstModule
const state = {
    myArray: [//has some items]
} 

in 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}
        }
    }
    

但是,这是问题:

  • 根据模块中的DOCS突变,无法访问 rootState ,只有动作和Getters才能访问 rootstate

  • 不访问突变中的根酸盐,我该如何执行上面执行的逻辑?

  • 我是否必须在操作中访问 rootstate ,并将其传递给所承诺的突变作为有效载荷,就像我上述吗?

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

操作是您的逻辑代码应在此处确定是否进行突变的地方。您可以在fetchData操作中将检查到FirstModule的myArray。那是最好的做法。

但是,如果您确实需要在突变中访问rootState变量,则必须像当前一样将其作为变量参考。

最新更新