Javascript 计算属性中的Vuex和嵌套对象导致反应性问题

Javascript 计算属性中的Vuex和嵌套对象导致反应性问题,javascript,c,vue.js,vuex,Javascript,C,Vue.js,Vuex,我使用vuex存储来处理会话,并加载不同页面的默认会话onCreatedhook。数据在变化,大多数情况下工作正常,但现在我注意到,即使我更改了数据,也没有调用setter/mutation session.js(mixin从主组件加载默认会话) 贮藏 defaultSession示例(组件中) 例如,在我的组件中,我访问,但既不调用setter,也不调用mutation。(该对象是嵌套的,因为我还在其中存储表数据。) 更新(可能的解决方法): 由于您的defaultSession相当大,为了深

我使用vuex存储来处理会话,并加载不同页面的默认会话
onCreated
hook。数据在变化,大多数情况下工作正常,但现在我注意到,即使我更改了数据,也没有调用setter/mutation

session.js(mixin从主组件加载默认会话)

贮藏

defaultSession示例(组件中)

例如,在我的组件中,我访问
,但既不调用setter,也不调用mutation。(该对象是嵌套的,因为我还在其中存储表数据。)

更新(可能的解决方法):


由于您的
defaultSession
相当大,为了深入了解反应性,请尝试使用
this.$set(state.someObject'b',2)
,请参阅此处的详细信息我不明白如何实现这一点,v-model已经在使用
this.$set
并且我的计算setter甚至没有被调用dupdate:为我的问题添加了解决方法,但是我认为这不是应该的方式,因为您的
defaultSession
相当大,为了深入了解反应性,请尝试使用
this.$set(state.someObject,'b',2)
,请参见此处的详细信息我不明白如何实现这一点,v-model已经使用了
this.$set
,而我的计算setter甚至没有被称为dupdate:为我的问题添加了解决方法,但我认为这不是应该采用的方式
export default {
  data () {
    return {
      defaultSession: {}
    }
  },
  created () {
    this.$store.dispatch('session/update', { data: this.defaultSession })
  },
  computed: {
    sessionData: {
      get () {
        console.log('GETTER')
        return this.$store.getters['session/sessionData']
      },
      set (session) {
        console.log('SETTER')
        this.$store.dispatch('session/update', { data: session })
      }
    }

  }
}


export default {
  namespaced: true,

  state: {
    session: {},
  },

  getters: {
    session (state) {
      return state.session
    },
    sessionData (state) {
      return state.session.data
    },
  },

  mutations: {
    UPDATE (state, session) {
      state.session = session
      console.log('[Session] Updated')
    }
  },

  actions: {
    update: ({ commit }, data) => {
      commit('UPDATE', data)
    }
}

        defaultSession: {
          name: '',
          viewId: '',
          defaultImage: null,
          dataTable: [{
            title: '',
            data: [],
            selected: [],
          }],
          imageTableData: [],
          selectedIcons: []
        },
watch: {
  sessionData: {
    deep: true,
    handler() {
       //commit changes here
    }
  }
}