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.js和secondModule.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
变量,则必须像当前一样将其作为变量引用传入