跳到主要内容

watchEffect

2024年03月18日
柏拉文
越努力,越幸运

一、认识


watchEffect 立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。

二、语法


<template>
<div>
{{ a }}
{{ b }}
<button @click="onChangeA">改变 a</button>
<button @click="onChangeB">改变 b</button>
</div>
</template>

<script setup lang="ts">
import { ref, watchEffect } from 'vue'

const a = ref(0)
const b = ref(0)

const stopWatchEffect = watchEffect(
() => {
console.log(a.value)
console.log(b.value)
},
{
flush: 'post'
}
)

const onChangeA = () => {
a.value += 1
if (a.value === 4) {
stopWatchEffect()
}
}

const onChangeB = () => {
b.value += 1
}
</script>
  • 第一个参数: 要运行的副作用函数。这个副作用函数的参数也是一个函数,用来注册清理回调。清理回调会在该副作用下一次执行前被调用,可以用来清理无效的副作用

  • 第二个参数: 一个可选的选项,可以用来调整副作用的刷新时机或调试副作用的依赖。

    • flush: post | sync。默认情况下,侦听器将在组件渲染之前执行。设置 flush: 'post' 将会使侦听器延迟到组件渲染之后再执行。在某些特殊情况下 (例如要使缓存失效),可能有必要在响应式依赖发生改变时立即触发侦听器。这可以通过设置 flush: 'sync' 来实现。然而,该设置应谨慎使用,因为如果有多个属性同时更新,这将导致一些性能和数据一致性的问题。
  • 返回值: 一个用来停止该副作用的函数