1微型响应系统
// 存储副作用函数的桶
const bucket = new Set();
// 原始数据
const data = { text: "hello world" }; //对原始数据的代理
const obj = new Proxy(data, {
// 拦截读取操作
get(target, key) {
// 将副作用函数 effect 添加到存储副作用函数的桶中
bucket.add(effect);
// 返回属性值
return target[key];
},
// 拦截设置操作
set(target, key, newVal) {
// 设置属性值
target[key] = newVal;
// 把副作用函数从桶里取出并执行
bucket.forEach((fn) => fn());
// 返回 true 代表设置操作成功
return true;
},
});
function effect() {
document.body.innerHTML = obj.text;
}
// 执行副作用函数,触发读取
effect();
setTimeout(() => {
obj.text = "hello vue3";
}, 1000);
Last updated