前端经典面试题 | 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选项运行执行异步操作,限制执行该操作的频率,并在拿到最终的结果前,设置中间状态.

相关文章
|
19天前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
45 10
|
3月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
157 60
|
3月前
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
110 58
|
3月前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
3月前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
3月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
82 1
|
4月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
4月前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
73 2
|
4月前
|
前端开发 JavaScript 安全
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
254 4
|
3月前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】 React与Vue:前端框架的巅峰对决与选择策略

热门文章

最新文章