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