vue3 - watchPostEffect在DOM 更新后的副作用处理

文章目录

    • [1. `watchPostEffect` 的基本用法](#1. watchPostEffect 的基本用法)
    • [2. `watchPostEffect` 与 `watchEffect` 的对比](#2. watchPostEffectwatchEffect 的对比)
    • [3. 使用场景](#3. 使用场景)

watchPostEffect 用于在 DOM 更新完成后 执行回调。这是 Vue 响应式系统中一个相对较新的 API,允许你执行那些需要在 Vue 完成更新后进行的任务,例如 DOM 操作、第三方库更新等。它的行为与 watchEffect 类似,但执行时机更加延迟,确保所有 DOM 更新都已完成。

1. watchPostEffect 的基本用法

js 复制代码
<template>
  <div>
    <h1>{{ count }}</h1>
    <button @click="updateCount">修改 count</button> <br />
  </div>
</template>
<script setup lang="ts">
import { ref, watchPostEffect, watchEffect } from "vue";

const count = ref(0);

// 执行比watchPostEffect要早,因为它是在 DOM 更新之前执行的
watchEffect(() => {
  console.log(`watchEffect - ${count.value}`);
});

// 执行比watchEffect要晚,因为它是在 DOM 更新之后执行的
watchPostEffect(() => {
  console.log(`watchPostEffect - DOM 已更新,当前 count 值为: ${count.value}`);
});
function updateCount() {
  count.value++; // 数据变化,视图更新后,watchPostEffect 执行
}
</script>

在这个例子中:

  • watchPostEffect 会在 count 改变之后,视图更新完成后执行回调,打印出最新的 count 值。执行时机始终是比 watchEffect 要晚的。

如图所示:

2. watchPostEffectwatchEffect 的对比

特性 watchEffect watchPostEffect
执行时机 在响应式数据变化后,立即执行回调函数 在响应式数据变化后,DOM 更新完成后执行回调
适用场景 当你希望在数据变化后立刻执行副作用 当你希望在 DOM 更新后执行副作用,如操作 DOM 或调用第三方库
常见用途 计算值、触发数据相关的副作用 DOM 操作、与非 Vue 的库交互、做布局等操作

3. 使用场景

watchPostEffect 主要用于那些需要在 DOM 更新之后 执行的副作用操作。这包括但不限于:

  • DOM 操作:例如,调整元素的位置、大小、或者在更新后执行的动画。
  • 第三方库:如果你在 Vue 中使用了第三方库(例如图表库、地图插件等),而这些库需要等到 Vue 完成 DOM 更新后再进行渲染或者更新。
  • 性能优化:确保某些操作仅在 DOM 更新后才执行,避免不必要的更新操作。

👉点击进入 我的网站

相关推荐
灵感__idea5 小时前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea7 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd8 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌9 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈9 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫9 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝9 小时前
svg图片
前端·css·学习·html·css3
王夏奇10 小时前
python中的__all__ 具体用法
java·前端·python
大家的林语冰10 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong2310 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习