Vue 3 响应式原理源码解析 All In One
Vue 3 响应式原理源码解析 All In One
Set & Map / Proxy / Reflect
WeakSet / WeakMap
let p = 5;
let q = 2;
let total = p * q;
total;
// 10
p = 10;
// 10
total;
// 10, ❌ 不会响应式的更新
// 依赖收集
let dep = new Set();
let effect = () => {
total = p * q;
console.log(`new total:`, total);
};
track = (effect) => {
dep.add(effect)
}
track(effect);
dep;
/*
Set(1) {ƒ}[[Entries]]0: () => {
total = p * q;
console.log(`new total:`, total);
}size: 1[[Prototype]]: Set
*/
trigger = (dep) => {
// 依赖,触发执行
for (let effect of dep) {
effect();
}
}
trigger(dep);
// new total: 20
total;
// 20
// ??? proxy & reflect 拦截,触发 trigger ✅
https://github.com/learning-js-by-reading-source-codes/vue-3-reactivity
https://github.com/learning-js-by-reading-source-codes/vue-3-reactivity/tree/main/src
Vue 3 & vue-next & vue core
https://github.com/learning-js-by-reading-source-codes/vue-3-reactivity/issues/1
Vue 3 响应式实现原理
function reactive(obj) {
return new Proxy(obj, {
get(target, key) {
track(target, key)
return target[key]
},
set(target, key, value) {
target[key] = value
trigger(target, key)
}
})
}
function ref(value) {
const refObject = {
get value() {
track(refObject, 'value')
return value
},
set value(newValue) {
value = newValue
trigger(refObject, 'value')
}
}
return refObject
}
https://vuejs.org/guide/extras/reactivity-in-depth.html#how-reactivity-works-in-vue
refs
https://github.com/Code-Pop/vue-3-reactivity
©xgqfrms 2012-2025
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/16797628.html
未经授权禁止转载,违者必究!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2020-10-16 前端微服务架构-微前端
2020-10-16 why 2020 you should create a new modern website with webfullstack All In One
2020-10-16 JSON-LD 结构化数据
2019-10-16 computer object name
2019-10-16 css 左右两栏高度自适应
2018-10-16 HTML5 & CSS3 & font-family