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'})

应该发生的是:

  • 更新state.integration(works)

  • 从indexeddb(
    RetrievelocDescribeFields
    )获取每个
    state.Object
    值的新项,并按属性键将它们保存到state.describeFields(讽刺的是,实际上会将它们保存到state,但随后会出现错误)

  • 如果没有数据从
    RetrievelocDescribeFields
    到达,则转到远程api收集数据(代码从未到达此处,但在我将所有这些移到vuex之前确实起作用)

  • 我尝试过对承诺进行分组,更具体地说,我尝试过在出错的函数中使用console.log on state.descripbefields和payload.data,这两个函数都会将预期的数据输出到控制台

    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之外……这是最糟糕的问题……应该有效的问题……可能是您正在运行的旧版本或类似的版本(浏览器缓存等)。确保所有内容都已保存,并且您正在运行干净的新版本