Skip to content

说一说对 Vue 响应式的理解

什么是响应式?

使数据变化可以被检测并对这种变化作出响应的机制,被称为响应式

为什么 vue 需要响应式?

MVVM 框架中要解决一个核心问题就是链接数据层和视图层,通过数据驱动应用,数据变化,视图更新,要做到这一点就需要对数据做响应式处理,这样一旦数据变化就可以立即作出更新处理

它能为我们带来什么好处?

通过数据响应式加上虚拟 DOM 和 pathch 算法,开发人员只需要操作数据,关心业务,完全不用接触繁琐的 DOM 操作,从而大大提高开发效率,降低开发难度

vue 的响应式是怎么实现的?有哪些优缺点?

vue2 中数据响应式会根据数据类型来做不同的处理,如果是对象则采用Object.defineProperty() 的方式定义数据拦截,当数据被访问或发生变化时,我们感知并作出响应,如果是数组则通过覆盖数组对象原型的 7 个变更方法,使这些方法可以额外的做出更新通知,从而做出响应。

但实际使用中也存在一些缺点,比如初始化时递归遍历会造成性能损失,新增或删除属性时需要开发者使用Vue.set/delete这样特使 API 才能生效;对于 es6 中新产生的MapSet这些数据结构不支持等问题

vue3 中响应式的新变化?

为了解决以上问题,Vue3 重新编写了这一部分实现:利用 ES6 的 Proxy 代理来处理响应化的数据,不需要使用特殊的 API,初始化性能和内存消耗都得到了大幅改善,由于响应化的是实现代码抽取为独立的reactivity 包,可以让我们更灵活的使用它,第三方的扩展开发更加灵活了