在Vuex中,如果store中数据是数组或者是对象,操作之后,vuex 数值曾经扭转了,但页面展现的对应数值却没有扭转。
相似的状况,大部分呈现在这几个场景
state: { obj: { a:1, }, arr: [0,1,2]}1. 扭转数组的某一项state.arr[0] = 1;2. 对象赋值新属性state.obj.b = 2;...
导致起因
Vue2 Object.defineProperty的自身的机制问题,拓展https://cn.vuejs.org/v2/guide...
解决方案
优先应用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: { }})