vuex的store对象的state是响应式,凡是预先在state中定义的状态,都会被加入到响应式系统中,当状态发生了变化,所有引用状态的vue文件的template都会随之发生变化,做到响应式的功能。刚才也说了,提前定义好的会被加入到响应式系统中,那后面追加的属性或对象能不能加入到响应式系统中呢?答案是 如果按照指定的方式来添加和删除属性,是可以做到响应式的。
比如现在我要添加一个新属性height,用两种方式添加,如下:
方式1:此种方式能添加state中对象的属性,但无法加入到响应式系统中,即页面上不会显示出来,实际上确实存在了这个属性
mutations: { addheight(state){ state.stus[0]['height'] = 168 } }
方式2:此方式可以让属性加入到响应式系统中
mutations: { addheight(state){ Vue.set(state.stus[1],'height',178) //参数一为对象,参数二为key,参数为value } }
说完添加属性,再说下删除吧,想要删除属性并加入响应式系统,如下方式:
mutations: { delheight(state){ Vue.delete(state.stus[1],'height') //参数一为对象,参数二是key } }
来个总图: