前端经典面试题 | Vue的computed 和 watch的区别

简介: 前端经典面试题 | Vue的computed 和 watch的区别

一、回答点

侦听 响应变化 属性


computed是模版表达式的声明式描述,会创建一个新的响应式数据.而watch是响应式数据的自定义侦听器,用于响应数据的变化.computed具有缓存性及可依赖多个属性,getter函数没不良作用等特点.watch更适合异步或开销大的操作.


总结:


      computed计算属性:依赖其他属性值,computed有缓存,只有它依赖的值发生改变,下次获取computed的值时才会重新计算它.


      watch侦听器:更多的是起到了观察的作用,无缓存.类似于某数据的监听回调,每当数据发生变化时,就会执行回调进行之后的操作.

二、深入回答

1.实现原理

       computed等同于为属性设置getter函数(也可以设setter),而watch等同于为属性的setter设置回调函数,监听深度deep及相应速度immediate


      1.1 computed原理(四阶段)


      初始化阶段:为computed属性创建lazy watcher (这里watch指向双向绑定中的监听器.)


      模版渲染阶段:渲染watcher检测到computed属性时,调用computed属性的getter方法,而computed属性的getter方法会调用依赖属性的getter,而形成链式调用,并保存引用关系来进行之后的更新.取得结果后,lazy watcher将结果进行缓存,并返回给渲染watcher进行模版的渲染.


      多次模版渲染阶段:直接取lazy watcher中的缓存值给渲染watcher进行渲染


      依赖属性更新阶段:根据模版渲染阶段构建的依赖关系(链式调用)向上通过lazy watcher进行重新计算,缓存计算结果并通过 渲染watcher 对页面进行重新渲染


        1.2 watch原理


       watch本质是为每个监听属性的setter创建了一个watcher,当被监听的数据更新时,调用传入的回调函数.常见的参数有:deep和immediate,对应原理如下:


     deep:深度监听对象,为对象的每个属性创建一个watcher 确保对象的每个属性更新时都会触发传入的回调函数. 主要在于 对象属于引用类型,单个属性的更新并不会触发对象的setter,因此引入deep能够更好的解决监听对象的问题.同时也引入判断机制,在多个属性更新时回调函数仅触发一次,避免浪费资源.


      immediate:在初始化时直接调用回调函数,可以通过created阶段,手动进行调用回调函数实现相同效果

2.适用场景

       当需要进行数值计算,并依赖于其他数据时,使用computed,因为可以利用computed的缓存特性,避免每次获取值都要重新进行计算


       当需要在数据变化时执行异步或开销大的操作时,使用watch,使用watch选项运行执行异步操作,限制执行该操作的频率,并在拿到最终的结果前,设置中间状态.

相关文章
|
4月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
432 1
|
5月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
346 83
|
6月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
288 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
4月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
203 22
|
6月前
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
206 58
|
8月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
168 10
|
10月前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
10月前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
10月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
207 1