vue响应式原理细节求解答

对于vue响应式原理,里面的watcher。有个疑问。
(1)每个组件只有一个watcher,当数据被读取会被添加到相应的dep中。
(2)在某处用到该数据就会new一个新的watcher,然后添加到dep中呢。
这两种说法哪个对?
给出两个例子,帮忙分析,感谢。

例如,这个图片中dep1和dep2。如果按说法(1),那图中的三个watcher应该是同一个。但是vue官方文档的说法是图2到底哪个才是对的?求解答
全部评论
第一个是对的, watcher 中有这样一句话, this.value = this.get() 在getter 中会这样执行 , function getter () { pushTarget(this) // 将watcher放到Dep.target上 value = this.getter() // 如果是组件,这里的getter 就是就是模板编译后的渲染函数,执行执行这个函数会触发 Object.defineProperty() 中的 get,set, 会触发依赖手机,这样就可以做到,一个组件中用到多个变量,这多个变量的 Dep中都保存着这个组件的 watcher popTarget() // Dep.target 移除watcher }
2 回复 分享
发布于 2023-09-12 15:34 辽宁

相关推荐

09-24 00:16
已编辑
蚌埠坦克学院 前端工程师
1. web网页端与 B 端小程序,有没有针对不同的分辨率去做一些适配呢?2.  1rem 等于多少 px?它是基于什么来确定的?3.  除了rem,还知道有哪些可以进行适配吗?4.  实习项目中分页加载、滚动加载、预加载是怎么实现的5. 虚拟列表刷到了最后一页,这个时候里面的DOM有什么变化吗?6. 它里面还会有一个占位吗?还是说用户还以为它可以无限的往上面去加载呢?7. 实习项目中如何实现组件按需引入8. 还知道有有哪些前端性能优化手段?9. TDesign可以适配React和Vue吗,TDesign组件按需引入知道它的原理是什么吗10. 封装sdk,如何支持动态字段扩展的可复用模块11. 了解过低代码的设计逻辑吗12. 实习项目中的批量导入功能如何实现的,以及实现过程中遇到了棘手的问题嘛13. 时间轴联动功能拖拽底下的时间轴的时候,Echarts 它里面支持直接监听它的拖拽的动作吗?14. 既然支持,为啥还要进行二次封装15. 项目中封装公共组件库是封装到本地还是又起了一个库,然后通过publish 这种方式发布出去,然后再引用上?16. Vue 3 和 React的区别17. setTimeout,还有 Promise,还有 async/await的区别18. 从他们这个宏观任务、微观任务这方面来分析一下他们三个的区别19. 数组常见操作方法,**`join`**会改变原数组吗?20. 重绘和重排是啥,如何减少21. 平时怎么学习Web 前沿技术22. 未来有什么规划吗?23. 了解Agent这样的 AI 大模型吗、24. Agent它的主要应用是在哪一方面一面无手撕,大部分围绕实习和项目问,一面完秒过
查看24道真题和解析
点赞 评论 收藏
分享
ring2:建议备战考研就继续考,找工作两边受累,可以考完研,准备明年春招
点赞 评论 收藏
分享
评论
4
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务