一、前言
在options api
中我们采用watch
来监听data
中的数据或者props
中的参数变化。在componsiton api
中我们采用watchEffect
和watch
来进行监听数据变化,并且watchEffect
是自动收集依赖,watch
则需要我们自己指定需要监听的数据。接下来我们将详细讲解一下composition api
中的watchEffect
和watch
两个api
。
二、watchEffect的使用
watchEffect
刚开始就会立即执行,并且会自动收集依赖,当其中的依赖项发生改变,都会执行回调函数。watchEffect的停止监听
我们想一个例子,我们监听info对象中的age属性,当改变age到25时,则取消监听。
watchEffect
选项中返回的函数是停止监听函数。watchEffect清除副作用
在watchEffect
函数中需要传入一个回调函数,回调函数存在一个形参,该形参的调用可以传入一个回调函数可以清除副作用。在setup中使用ref
如上面代码所示,我们首先先对ref
传入内容为空,然后使用watchEffect
来对变量进行监听。但是存在一个问题,就是watchEffect
打印两次,因为首先当执行setup
函数时,此时DOM
并没有挂载,当执行完setup
之后,dom
挂载完毕,此时hEl
的值更换,再次执行watchEffect
的回调。
如果我们不想要执行第一个打印null,此时我们可以设置第二个参数,第二个参数是一个对象,设置{ flush:"post" }
,这样可以调整watchEffect的执行时机为DOM挂载之后,pre
表示挂载之前,也就是默认值,sync
这将强制效果始终同步触发。然而,这是低效的,应该很少需要。
此时只打印一个结果。
三、watchcomponsition api
中的watch
和options api
中的watch一样,都是用来监听某一个属性发生变化,执行相关的回调。watchEffect
和watch
进行对比,watch
是懒执行的(也就是说第一次不执行)。执行时会将newValue
和oldValue
传入函数。watch的简单使用
watch监听对象类型
监听ref对象
监听reactive对象
数组对象
函数
四、watch选项deep
:是否深层监测immediate
:是否立即执行。
我们监听普通对象,在使用deep:true时不能使用reactive
对象,因为在源码内部如果判断是reactive
对象时,默认会将deep设置为true。
设置immediate:true
就是当页面刚渲染时,就立即执行。此时oldValue为undefined。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/122947103
内容来源于网络,如有侵权,请联系作者删除!