Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

    • vue3 setup语法糖
    • vue3实现v-model
    • vue3组件通信
    • vue3使用pinia及pinia持久化
    • vue3使用$nextTick
    • Proxy的实际应用场景
    • ref和reactive的实现原理
    • vue3生命周期
    • 在vue文件外使用store
    • vue3中的编译器宏
    • vue3 ts中拼接本地图片地址
    • 数值滚动实现
    • setup语法糖下自定义组件name
    • vue-router4配置动态路由问题No match found for location with path
    • vue3挂载全局弹窗
    • vue3+vite配置环境变量问题
    • Vue3监听createApp创建的子组件事件
    • vue3源码学习——vue3核心模块
  • 前端
  • Vue3
kros
2022-11-03

vue3使用$nextTick

在vue3中使用nextTick很简单,如下:

<script setup>
import { ref, nextTick } from 'vue'

// 这里也可以使用reactive
const userInfo = ref({})

const updateUser = async () => {
  userInfo.name = '张三'
  userInfo.age = 13
  await nextTick()
  // dom已经更新
  // do something
}
</script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

使用很简单但我们还是有必要了解nextTick的原理,最快的方式自然是读源码啦:在目录/runtime-core/scheduler.ts中可以看到实现的方式

nextTick中创建了一个微任务,利用js的事件循环机制让回调在下一次渲染之后运行

const resolvedPromise: Promise<any> = Promise.resolve()
let currentFlushPromise: Promise<void> | null = null

export function nextTick(
  this: ComponentPublicInstance | void,
  fn?: () => void
): Promise<void> {
  const p = currentFlushPromise || resolvedPromise
  return fn ? p.then(this ? fn.bind(this) : fn) : p
}
1
2
3
4
5
6
7
8
9
10

那什么是事件循环呢?可以参考以下资料: 事件循环:微任务与宏任务 浏览器事件循环机制的动态演示-视频

上次更新: 2025/09/05, 8:09:00
vue3使用pinia及pinia持久化
Proxy的实际应用场景

← vue3使用pinia及pinia持久化 Proxy的实际应用场景→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev