Vue响应式系统
Vue.js 的响应式系统是其核心特性之一,它允许 Vue 跟踪数据的变化并在数据发生变化时自动更新 DOM。Vue 的响应式系统主要依赖于两个概念:观察者模式(Observer Pattern)和依赖收集(Dependency Collection)。
观察者模式trigger触发更新
Vue 实现了一种基于 ES5 特性(如 Object.defineProperty)的观察者模式。在这种模式中,每个数据对象(如选项API中的data函数返回的对象)都被转化为观察者对象。Vue 会在这些对象的属性上添加 getter 和 setter,从而能够追踪对这些属性的访问和修改。
tracker依赖收集
当渲染函数或计算属性被执行时,它们会访问响应式数据的属性,这时 Vue 会记录当前正在执行的渲染函数或计算属性作为依赖。这个过程称为依赖收集。一旦数据发生变化,Vue 会通知所有依赖于这个数据的渲染函数或计算属性,触发它们重新执行以反映最新的数据状态。
// 模拟ref响应式实现防抖功能
import {customRef} from 'vue'
export function debounceRef(value,delay=1000){
let timer;
return customRef((track,trigger)=>{
return{
get(){
track();//依赖自动收集
return value;
},
set(val){