当前位置: 首页 > news >正文

1.7vue声明周期

生命周期阶段与钩子函数

  1. 创建阶段

    • beforeCreate():实例初始化之后,数据观测和事件配置之前调用。此时无法访问到datamethods等属性。
    • created():实例创建完成后调用。完成了数据观测,属性和方法的运算,watch/event事件回调。但是尚未挂载到DOM。
  2. 挂载阶段

    • beforeMount():模板编译完成,即将挂载到DOM前调用。此时页面呈现的是未经Vue编译的DOM结构。
    • mounted():组件挂载到DOM后调用。可以操作真实DOM。
  3. 更新阶段

    • beforeUpdate():数据更新时,虚拟DOM重新渲染前调用。可以在这里进行状态记录或取消更新。
    • updated():由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用。此时可以对更新后的DOM进行操作。
  4. 销毁阶段

    • beforeDestroy():实例销毁之前调用。在这一步,实例仍然完全可用。通常用来清理定时器、解除绑定等。
    • destroyed():实例销毁后调用。调用后,所有的事件监听器和所有子实例都会被移除。

钩子函数的应用场景

  • created中发送异步请求获取数据。
  • mounted中操作DOM元素或者初始化第三方库。
  • beforeUpdate中可以获取当前的状态并在必要时进行修改,但要小心避免造成无限循环更新。
  • beforeDestroy中释放资源,比如清除定时器或者解绑事件监听器。

Vue.nextTick

Vue.nextTick() 是一个非常重要的工具,用于在下次 DOM 更新循环结束之后执行回调函数。当你修改了数据,但需要在 DOM 实际更新后进行某些操作时,就需要使用 nextTick

 典型使用场景示例:获取更新后的 DOM 元素尺寸

假设你有一个按钮,点击后切换一个 div 的显示状态(v-show),并希望在 div 显示出来后立即获取它的高度。

 错误做法(不使用 nextTick)
<template><div><button @click="showDiv">显示 div 并获取高度</button><div v-show="isVisible" ref="myDiv" style="background: lightblue;">这是一个动态显示的 div,内容可能很多...</div></div>
</template><script>
export default {data() {return {isVisible: false}},methods: {showDiv() {this.isVisible = true; // 数据更新,触发 DOM 更新// ❌ 错误:此时 DOM 还没有更新!const divHeight = this.$refs.myDiv.offsetHeight;console.log('高度:', divHeight); // 可能输出 0 或旧值}}
}
</script>

在这个例子中,this.isVisible = true 触发了 DOM 更新,但 Vue 的更新是异步批量处理的。当你立即访问 this.$refs.myDiv.offsetHeight 时,DOM 还没有完成渲染,因此你可能获取不到正确的高度。


 正确做法(使用 nextTick)
<template><div><button @click="showDiv">显示 div 并获取高度</button><div v-show="isVisible" ref="myDiv" style="background: lightblue;">这是一个动态显示的 div,内容可能很多...</div></div>
</template><script>
export default {data() {return {isVisible: false}},methods: {showDiv() {this.isVisible = true; // 数据更新// ✅ 正确:在 DOM 更新完成后执行this.$nextTick(() => {const divHeight = this.$refs.myDiv.offsetHeight;console.log('真实高度:', divHeight); // 输出正确的高度// 你可以在这里进行基于 DOM 尺寸的后续操作});}}
}
</script>

 为什么需要 nextTick

  • Vue 在检测到数据变化后,不会立即更新 DOM,而是开启一个队列,异步地批量更新。
  • 这样可以避免在同一个事件循环中多次状态变更导致的重复渲染,提高性能。
  • nextTick 回调会在 Vue 刷新 DOM 后执行,确保你能访问到最新的 DOM 状态。
http://www.dtcms.com/a/310917.html

相关文章:

  • Token系列 - 再谈稳定币
  • 保证金率(Margin Ratio)
  • 【最新区块链论文录用资讯】CCF A--WWW 2025 23篇
  • WebForms 简介
  • Redis 核心概念、命令详解与应用实践:从基础到分布式集成
  • 通过filezilla在局域网下实现高速传输数据
  • Selenium自动化:轻松实现网页操控
  • sqli-labs:Less-21关卡详细解析
  • C/C++常用字符串函数
  • 仿muduo库实现高并发服务器
  • 利用DeepSeek将Rust程序的缓冲输出改写为C语言实现提高输出效率
  • 自动化革命:软件开发的引擎与未来蓝图
  • carla-0.10.0 矿山地图和autoware联调
  • Rust进阶-part2-泛型
  • VAST视频广告技术实现:从零开始搭建视频广告投放系统
  • 大模型笔记1——李宏毅《2025机器学习》第一讲
  • 中科院自动化所机器人视觉中的多模态融合与视觉语言模型综述
  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据
  • 第三阶段—8天Python从入门到精通【itheima】-141节(pysqark实战——数据输入)
  • True or False? 基于 BERT 学生数学问题误解检测
  • Python 第一阶段测试题 答案及解析
  • Vuex 4.0:Vue.js 应用的状态管理新篇章
  • SLAM中的非线性优化-2D图优化之零空间实战(十六)
  • TiDB 和 MySQL 的迁移过程是什么?会遇到什么问题?怎么解决的?
  • 编译器工作原理的显微镜级拆解
  • 【读代码】 KAG项目:开源知识图谱自动构建与推理平台原理与实践
  • PYTHON从入门到实践-18Django从零开始构建Web应用
  • SpringBoot3.x入门到精通系列:2.1 自动配置原理
  • 【软考中级网络工程师】知识点之 VRRP
  • 关于Web前端安全防御CSRF攻防的几点考虑