Vue面试题29:watch和watchEffect有何异同?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
-
思路
- 1.给出两者定义;
- 2.给出场景上的不同;
- 3.给出使用方式和细节;
- 4.原理阐述;
-
范例
-
watchEffect
立即运行一个函数,然后被动地追踪它的依赖,当这些依赖改变时重新执行该函数;watch
是
侦测一个或多个响应式数据源并在数据源变化时调用一个回调函数; -
watchEffect(effect)
是一种特殊watch
,传入的函数既是依赖收集的数据源,也是回调函数。如果我们不关心响应式数据变化前后的值,只是想拿这些数据做些事情,那么watchEffect
就是我们需要的。watch
更底层,可以接收多种数据源,包括用于依赖收集的getter函数
,因此它完全可以实现watchEffect
的功能,同时由于可以指定getter函数,依赖可以控制的更精确,还能获取数据变化前后的值,因此如果需要这些时我们会使用watch; -
在使用细节上,
watchEffect
在使用时,传入的函数会立刻执行一次。watch
默认情况下并不会执行回调函数,除非我们手动设置immediate
选项; -
从实现上来说,
watchEffect(fn)
相当于watch(fn,fn,{immediate:true})
-
底层来说:watchEffect和watch都是借助doWatch函数,只不过watch需要传入第二个回调cb,而watchEffect不需要传:
//watchEffect export function watchEffect( effect:WatchEffect, options?:WatchOptionsBase ):WatchStopHandle{ return doWatch(effect,null,options) } //watch export function watch<T = any,Immediate extends Readonly<boolean> = false>( source: T | watchSource<T>, cb: any,options?:watchOptions<Immediate> ):watchStopHandle { return doWatch(source as any,cb, options) } //很明显,watchEffect就是一种特殊的watch实现
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律