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语法等等,不在本文讨论
最后感谢尤大