一文讲清楚vue3中watchEffect的使用

基本使用

在Vue 3中,watchEffect 是一个用于创建响应式副作用的 API。与 watchcomputed 不同,watchEffect 不需要显式地依赖于响应式数据,而是自动追踪其使用的所有响应式依赖,并在这些依赖发生变化时重新运行其回调函数。需要注意的是,watchEffect会在组件挂载时自动执行一次,效果就像watch配置了immediate为true一样

import { reactive, watchEffect } from 'https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.esm-browser.js'

let template = `
    <div>{{data.count}}</div>
    <button @click="data.count++">+1</button>
`

export default {
    setup: function () {
        let data = reactive({
            count: 0
        })

        watchEffect(()=>{
            console.log('watchEffect',data.count)
        })

        return { data }
    },
    template
}

当我们点击页面上的+1按钮时,会引发data.count的变化,而watchEffect中依赖这个数据,就会自动执行回调函数打印结果

取消侦听

一般情况下,侦听器会被链接到该组件的生命周期,但也可以通过手动调用watchEffect返回的函数去取消侦听,如下我们改写上面的例子,在onBeforeMount生命周期钩子中停止侦听,效果就是组件一被挂载就停止侦听,但似乎这没什么意义,你完全可以在其它地方调用它。

import { reactive, watchEffect, onBeforeMount } from 'https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.esm-browser.js'

setup: function () {
    let data = reactive({
        count: 0
    })

    let stop = watchEffect(()=>{
        console.log('watchEffect',data.count)
    })

    onBeforeMount(stop)

    return { data }
}

优点

  1. 对于这种只有一个依赖项的例子来说,watchEffect() 的好处相对较小。但是对于有多个依赖项的侦听器来说,使用 watchEffect() 可以消除手动维护依赖列表的负担。

  2. 如果你需要侦听一个嵌套数据结构中的几个属性,watchEffect() 可能会比深度侦听器更有效,因为它将只跟踪回调中被使用到的属性,而不是递归地跟踪所有的属性。

  3. watchEffect,则会在副作用发生期间追踪依赖。它会在同步执行过程中,自动追踪所有能访问到的响应式属性。这更方便,而且代码往往更简洁。

缺点

其响应性依赖关系会不那么明确

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值