相关文章推荐
儒雅的松鼠  ·  layout_gravity 和 ...·  7 月前    · 
失望的针织衫  ·  IConvertible ...·  9 月前    · 
乖乖的四季豆  ·  Ternary Search Tree ...·  1 年前    · 
犯傻的葡萄  ·  CVPR2023: ...·  1 年前    · 

Vue2 Object.defineProperty的本身的机制问题,拓展 https://cn.vuejs.org/v2/guide/reactivity.html#%E5%A6%82%E4%BD%95%E8%BF%BD%E8%B8%AA%E5%8F%98%E5%8C%96

Vue.js是基于Object.defineProperty对对象实现“响应式化”,而对于数组,Vue.js提供的方法是重写push、pop、shift、unshift、splice、sort、reverse这七个 数组方法 。修改数组原型方法的代码可以参考 observer/array.js 以及 observer/index.js

参考 Vue官网

优先使用Vue.set,使用JSON.parse(JSON.stringify(state.obj)触发对象更新 或者 state.arr.push() 触发数组更新 也可以;
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
     state: {
        obj: {
            a:1,
        arr: [0,1,2]
    mutations: {
        SET_STATE_DATA(state){
            // state.obj.b= '233'; // 错误 页面不会更新 
            // JSON.parse(JSON.stringify(state.obj) //不推荐此方法触发更新 显得很LOWB
            Vue.set(state.obj,'b','233') // 正确的方法
            // state.arr[0] = 233; // 错误 页面不会更新
            // state.arr.push() //不推荐此方法触发更新
            Vue.set(state.arr,0,233) // 正确的方法
    actions: {