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'
来实现。然而,该设置应谨慎使用,因为如果有多个属性同时更新,这将导致一些性能和数据一致性的问题。
-
返回值: 一个用来停止该副作用的函数