- 使用基于proxy初始化时懒处理,用户访问才做拦截处理,初始化更快一些,不是运行的时候更快了。
- Vue3的响应式系统是其最核心的部分之一,它基于 ES6的 Proxy ,对象进行了全新的实现,与 Vue2基于 Object.defineProperty 的实现相比,不仅更高效还更强大。
主要概念:
- Reactive:使用 reactive 函数可以将普通的 JavaScript 对象转化为响应式对象。
- Ref:使用 ref 函数可以创建一个包含响应式值的单一引用。
- Computed:computed 函数用于创建依赖于响应式对象的计算属性。
- Watch 和 WatchEffect:允许你观察响应式数据的变化,并执行相应的操作。
工作原理:
- 依赖追踪: 当你访问响应式对象的某个属性时,Vue 会自动“记住”这个访问,并将当前的“效果”(effect,通常是一个组件的渲染函数或一个 watcher)添加到这个属性的依赖列表中。
- 响应式更新: 当你修改响应式对象的某个属性时,Vue 会找到依赖这个属性的所有效果,并将它们标记为“脏”(stale)以便重新执行或染。
- 批量更新: Vue3的响应式系统会聪明地批量更新效果,以避免不必要的重复执行这一切都是自动、高效地完成的。
- 嵌套属性: 由于使用了 Proxy,Vue3能够自动地使对象的嵌套属性也变成响应式的。Vue3的响应式系统同样支持数组,并能捕捉到数组的变异操作
- 懒求值:computed 属性具有懒求值(lazy-evaluation)的特性,只有当其依赖的数据发生变化时,才会重新求值。
性能优化:
- Shallow Reactive 和 Shallow Ref:可以用来创建“浅”响应式对象,即不会深入到嵌套属性。
- Readonly:可以用来创建只读的响应式对象。
- Batching:通过异步队列和 nextTick,Vue3能更智能地处理大量响应式更新,减少 DOM 操作和计算。
- Suspense 和异步组件:与Vue的响应式系统结合,能够高效管理异步操作和状态。
示例:
1 | import { reactive, ref, computed, watch } from "vue"; |