【Vue.js设计与实现】第二篇第4章:响应系统-响应系统的作用与实现-阅读笔记(完结)
在Vue.js的响应系统中,响应式的目的是为了跟踪数据变化,并在数据变化时自动更新视图。这一系统的核心是Observer、Dep、Watcher和Directive这几个组件。
Observer:用于将数据变为可观察的,它会针对数组和对象进行遍历,并为其属性创建观察者。
Dep:一个依赖收集器,用于收集Watcher,并在数据变化时通知它们。
Watcher:观察者,它会执行响应的操作,比如更新DOM。
Directive:指令,Vue中的特殊属性,用于在DOM和数据之间建立响应式的桥梁。
以下是Observer的一个简化版实现:
class Observer {
constructor(data) {
this.data = data;
this.walk(data);
}
walk(data) {
if (Array.isArray(data)) {
data.forEach(item => this.observe(item));
} else if (typeof data === 'object') {
Object.keys(data).forEach(key => {
this.defineReactive(data, key, data[key]);
});
}
}
observe(value) {
if (typeof value === 'object') {
return new Observer(value);
}
}
defineReactive(obj, key, value) {
this.walk(value);
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: () => value,
set: newValue => {
if (value !== newValue) {
this.walk(newValue);
value = newValue;
// 通知依赖更新
}
}
});
}
}
这个代码实例展示了如何创建一个Observer,用来将数据变为可观察的,并定义响应式的属性。在属性的getter和setter中,我们可以添加依赖收集和触发更新的逻辑。这个实现是简化的,并没有包含Dep和Watcher的部分,但足以说明Observer的核心功能。
评论已关闭