vue3中watch()的使用方法

编程入门 行业动态 更新时间:2024-10-24 08:21:08

vue3中watch()的<a href=https://www.elefans.com/category/jswz/34/1769874.html style=使用方法"/>

vue3中watch()的使用方法

vue3中watch()的使用方法

watch() 默认是懒侦听的,即仅在侦听源发生变化时才执行回调函数。
下面是多参数批量监听

const nodeInfo = reactive(props.nodeInfo);
const checkPackInfo = reactive(props.checkPackInfo);
watch([nodeInfo,checkPackInfo,()=>packageForm.unitPrice,()=>packageForm.minimumOrderSize], ([nodeInfo, checkPackInfo,unitPrice,minimumOrderSize], [prevNodeInfo, prevCheckPackInfo,prevUnitPrice,prevMinimumOrderSize]) => {if(nodeInfo!=prevNodeInfo){执行事件一}if(checkPackInfo!=prevCheckPackInfo){if(checkPackInfo.packageId){执行事件二} }if(unitPrice!=prevUnitPrice||minimumOrderSize!=prevMinimumOrderSize){执行事件二}},{immediate: true,deep:true})

第一个参数是侦听器的源。这个来源可以是以下几种:

一个函数,返回一个值
一个 ref
一个响应式对象
…或是由以上类型的值组成的数组

第二个参数是在发生变化时要调用的回调函数。

这个回调函数接受三个参数:新值、旧值,以及一个用于注册副作用清理的回调函数。该回调函数会在副作用下一次重新执行前调用,可以用来清除无效的副作用,例如等待中的异步请求。

当侦听多个来源时,回调函数接受两个数组,分别对应来源数组中的新值和旧值。

第三个可选的参数是一个对象,支持以下这些选项:

immediate:在侦听器创建时立即触发回调。第一次调用时旧值是 undefined。
deep:如果源是对象,强制深度遍历,以便在深层级变更时触发回调。参考深层侦听器。
flush:调整回调函数的刷新时机。参考回调的刷新时机及 watchEffect()。
onTrack / onTrigger:调试侦听器的依赖。参考调试侦听器。
与 watchEffect() 相比,watch() 使我们可以:

懒执行副作用;
更加明确是应该由哪个状态触发侦听器重新执行;
可以访问所侦听状态的前一个值和当前值。
示例

侦听一个 getter 函数:

const state = reactive({ count: 0 })
watch(() => state.count,(count, prevCount) => {/* ... */}
)

侦听一个 ref:

const count = ref(0)
watch(count, (count, prevCount) => {/* ... */
})

当侦听多个来源时,回调函数接受两个数组,分别对应来源数组中的新值和旧值:

watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {/* ... */
})

当使用 getter 函数作为源时,回调只在此函数的返回值变化时才会触发。如果你想让回调在深层级变更时也能触发,你需要使用 { deep: true } 强制侦听器进入深层级模式。在深层级模式时,如果回调函数由于深层级的变更而被触发,那么新值和旧值将是同一个对象。

const state = reactive({ count: 0 })
watch(() => state,(newValue, oldValue) => {// newValue === oldValue},{ deep: true }
)

当直接侦听一个响应式对象时,侦听器会自动启用深层模式:

const state = reactive({ count: 0 })
watch(state, () => {/* 深层级变更状态所触发的回调 */
})

watch() 和 watchEffect() 享有相同的刷新时机和调试选项:

watch(source, callback, {flush: 'post',onTrack(e) {debugger},onTrigger(e) {debugger}
})

停止侦听器:

const stop = watch(source, callback)

// 当已不再需要该侦听器时:

stop()

副作用清理:

watch(id, async (newId, oldId, onCleanup) => {const { response, cancel } = doAsyncWork(newId)// 当 `id` 变化时,`cancel` 将被调用,// 取消之前的未完成的请求onCleanup(cancel)data.value = await response
})

更多推荐

vue3中watch()的使用方法

本文发布于:2023-11-14 14:30:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587621.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:使用方法   watch

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!