我有几个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
变量,则必须像当前一样将其作为变量参考。