type
status
date
slug
summary
tags
category
icon
password
Edited
Mar 8, 2023 01:08 PM
Created
Mar 8, 2023 12:58 PM
概念图
响应式原理每个组件实例都对应一个watcher
实例,会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知watcher
,从而使它关联的组件重新渲染。

架构
Vue
类负责把data
中的属性注入到Vue
实例,并调用Observer
类和Compiler
类。
Observer
类负责数据劫持,把每一个data
转换成getter
和setter
。其核心原理是通过Object.defineProperty
实现。
Compiler
类负责解析指令和插值表达式(更新视图的方法)。
Dep
类负责收集依赖、添加观察者模式。通知data
对应的所有观察者Watcher
来更新视图。在Observer
类把每一个data
转换成getter
和setter
时,会创建一个Dep
实例,用来负责收集依赖并发送通知。在每一个data
中在getter
中收集依赖。在setter
中通知依赖,既通知所有Watcher
实例新视图。
Watcher
类负责数据更新后,使关联视图重新渲染。

实现
文件目录结构

Vue
Observer
Compiler
Dep
Watcher
参考链接
- 作者:JinSo
- 链接:https://jinso.top/article/framework-mini-vue
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。