Javascript VueJS2和Vuex深层嵌套状态对象变异——声明状态变量未定义
我一直在尝试更新Javascript VueJS2和Vuex深层嵌套状态对象变异——声明状态变量未定义,javascript,vue.js,vuejs2,vuex,Javascript,Vue.js,Vuejs2,Vuex,我一直在尝试更新state.descripbefields.user并在render:TypeError:无法读取未定义的属性“user”时出错 错误即将消失的代码部分是: state.descripebields[payload.obj]=payload.data; 其中,payload.obj是“用户”或“帐户” 这是一个菊花链的调用,我认为这是造成问题的原因,但我不是一个足够强大的开发人员,无法理解所有的含义。实现这一点…感谢你们 菊花链从这个开始。$store.dispatch('set
state.descripbefields.user
并在render:TypeError:无法读取未定义的属性“user”时出错
错误即将消失的代码部分是:
state.descripebields[payload.obj]=payload.data;
其中,payload.obj
是“用户”或“帐户”
这是一个菊花链的调用,我认为这是造成问题的原因,但我不是一个足够强大的开发人员,无法理解所有的含义。实现这一点…感谢你们
菊花链从这个开始。$store.dispatch('setCurrentIntegration',{data:{stuff:'here'})
应该发生的是:
RetrievelocDescribeFields
)获取每个state.Object
值的新项,并按属性键将它们保存到state.describeFields(讽刺的是,实际上会将它们保存到state,但随后会出现错误)RetrievelocDescribeFields
到达,则转到远程api收集数据(代码从未到达此处,但在我将所有这些移到vuex之前确实起作用)export default {
state: {
integration: {},
objects: ["user", "account"],
describeFields: { user: [], account: [] }
},
getters: {
getCurrentIntegration(state) {
return state.integration;
},
getCurrentDescribeFields: state => obj => {
return state.describeFields.hasOwnProperty(obj)
? state.describeFields[obj]
: [];
}
},
actions: {
setCurrentIntegration({ commit, dispatch, state }, payload) {
return new Promise(resolve => {
commit("updateCurrentIntegration", payload);
let promises = [];
state.objects.forEach(obj => {
promises.push(dispatch("retrieveLocalDescribeFields", { obj: obj }));
});
resolve(Promise.all(promises));
});
},
setCurrentDescribeFields({ commit }, payload) {
return new Promise(resolve => {
commit("updateCurrentDescribeFields", payload);
resolve(true);
});
},
setClearDescribeFields({ commit }) {
return new Promise(resolve => {
commit("updateClearDescribeFields");
resolve(true);
});
},
retrieveLocalDescribeFields({ commit, dispatch, state, getters }, payload) {
return new Promise(resolve => {
// go get data from indexeddb...
// dexis call omitted
if (theFields.length) {
resolve(
commit("updateCurrentDescribeFields", {
obj: payload.obj,
data: theFields
})
);
} else {
resolve(dispatch("retrieveRemoteDescribeFields", payload));
}
});
},
retrieveRemoteDescribeFields({ commit, state, getters }, payload) {
return new Promise(resolve => {
// go get data from remote api...
// axios call omitted
commit("updateCurrentDescribeFields", {
obj: payload.obj,
data: res.data.records
});
resolve(true);
});
}
},
mutations: {
updateClearDescribeFields(state) {
state.describeFields = { user: [], account: [] };
},
updateCurrentIntegration(state, payload) {
state.integration = payload.data;
},
updateCurrentDescribeFields(state, payload) {
state.describeFields[payload.obj] = payload.data;
}
}
};
好的。
-羞愧地垂着头-
问题在于由于SetCurrentDescribeFields(分页组件)而更改的同级组件
就是那一块出错了。这个痕迹正好追溯到了商店的突变。嘎
感谢您的快速帮助。非常感谢!好的。
-羞愧地垂下头-
问题在于由于SetCurrentDescribeFields(分页组件)而更改的同级组件
就是那一块出错了。这个痕迹正好追溯到了商店的突变。嘎
感谢您的快速帮助。非常感谢!一切看起来都是正确的。您是否绝对确定您的
updateCurrentDescriptibeFields
mutation中没有任何打字错误?在中工作正常。我复制并粘贴了代码,没有任何更改(除了删除axios和dexis之外……这是最糟糕的问题……应该可以解决的问题……可能是您正在运行的旧版本或类似的版本(浏览器缓存等)。确保所有内容都已保存,并且您正在运行一个干净的新构建。所有内容看起来都是正确的。您是否绝对确定您的updateCurrentDescriptibeFields
mutation中没有任何打字错误?在中工作正常。我确实复制并粘贴了代码,没有任何更改(除了删除axios和dexis之外……这是最糟糕的问题……应该有效的问题……可能是您正在运行的旧版本或类似的版本(浏览器缓存等)。确保所有内容都已保存,并且您正在运行干净的新版本