Vuex 中修改 state 的唯一渠道就是执行 commit(‘xx’, payload) 方法,其底层通过执行 this._withCommit(fn) 设置_committing 标志变量为 true,然后才能修改 state,修改完毕还需要还原_committing 变量。外部修改虽然能够直接修改 state,但是并没有修改_committing 标志位,所以只要 watch 一下 state,state change 时判断是否_committing 值为 true,即可判断修改的合法性。
computed: {
height() {
return this.$store.state.height;
},
flag() {
return this.$store.state;
}
},
watch: {
flag: {
handler() {
if (this.$store._committing) {
console.log(this.$store._committing);
console.log('通过commit修改');
} else {
console.log(this.$store._committing);
console.log('直接修改');
}
},
deep: true
sync: true
}
},