Vue中给对象添加新属性界面不刷新?

11 阅读1分钟

一: 原理分析

vue2是通过Object.defineProperty实现数据响应式,当我们修改已有的属性,访问或者修改的时候,能够触发setter与getter。但是当我们为obj添加新属性的时候,是无法触发事件属性的拦截的 原因是一开始原先的属性被设置成了响应式,但是后面新增的属性,是没有被设置的。

二:解决方案

vue是不允许在已经创建的实例上动态添加新的响应式属性的 解决方案:

  • Vue.set()
  • Object.assign()
  • $forceUpdated()

$forceUpdate迫使Vue 实例重新渲染。仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

三:小结

  • 如果为对象添加少量的新属性,可以直接采用Vue.set()
  • 如果需要为新对象添加大量的新属性,则通过Object.assign()创建新对象
  • 如果你需要进行强制刷新时,可采用$forceUpdate()

vue3是用过proxy实现数据响应式,直接动态添加新属性仍可以实现数据响应式。

参考网站:mp.weixin.qq.com/s?__biz=MzU…