vue3为什么用Proxy替换Objec.defineProperty

191 阅读1分钟

Objec.defineProperty有哪些问题呢

在使用vue2的时候碰到的问题

1、往data定义的对象里边添加新属性,界面不刷新

2、数组变化时,界面不刷新

3、数据结构复杂时,会出现性能问题

怎么解决?

用$set包一下就行了

为什么会出现这样的问题

因为Objec.defineProperty只能监听属性,并且只能监听data中定义的属性

问题1 是因为没在data定义,所以这个属性没有注册响应式监听

问题2 是因为数组的有些属性也没注册响应式监听

问题3 是因为在加载时vue2会递归遍历data所有的属性,结构越复杂递归次数越多

vue3用Proxy实现响应式

Proxy有哪些优点

1、监听整个对象、数组

2、面对复杂结构时不需要跟v2一样递归属性,性能更好

proxy目前不兼容ie,如果想体验setup语法又想兼容ie,可以使用vue2.7及以上的版本

结语

当然vue3还做了很多其他的优化,像diff、setup、hooks语法等等,不在本文讨论

最后感谢尤大