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

Vue.js 生命周期详解

Vue.js 生命周期详解

在 Vue.js 中,生命周期钩子函数是组件在不同阶段执行的函数。以下是主要的生命周期钩子:

Vue 2 生命周期钩子

export default {// 1. 创建前 - 在实例初始化之后,数据观测和事件配置之前被调用beforeCreate() {console.log('beforeCreate - 组件实例刚被创建')},// 2. 创建后 - 实例创建完成后被调用,数据观测已完成created() {console.log('created - 组件实例创建完成')// 可以访问 data、methods,但 DOM 还未生成},// 3. 挂载前 - 在挂载开始之前被调用,相关的 render 函数首次被调用beforeMount() {console.log('beforeMount - 模板编译完成,但尚未挂载到页面')},// 4. 挂载后 - 实例被挂载后调用,DOM 已生成mounted() {console.log('mounted - 组件已挂载到页面')// 可以操作 DOM,发起网络请求},// 5. 更新前 - 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前beforeUpdate() {console.log('beforeUpdate - 数据更新前')},// 6. 更新后 - 由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用updated() {console.log('updated - 数据更新完成')},// 7. 销毁前 - 实例销毁之前调用,实例仍然完全可用beforeDestroy() {console.log('beforeDestroy - 组件销毁前')// 清理定时器、取消订阅等},// 8. 销毁后 - 实例销毁后调用,所有的事件监听器和子实例都被移除destroyed() {console.log('destroyed - 组件已销毁')}
}

Vue 3 组合式 API 生命周期

import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted,onActivated,onDeactivated
} from 'vue'export default {setup() {// 相当于 Vue 2 的 beforeCreate 和 createdconsole.log('setup - 组合式 API 的入口')onBeforeMount(() => {console.log('onBeforeMount - 挂载前')})onMounted(() => {console.log('onMounted - 挂载后')})onBeforeUpdate(() => {console.log('onBeforeUpdate - 更新前')})onUpdated(() => {console.log('onUpdated - 更新后')})onBeforeUnmount(() => {console.log('onBeforeUnmount - 卸载前')})onUnmounted(() => {console.log('onUnmounted - 卸载后')})// KeepAlive 组件特有的生命周期onActivated(() => {console.log('onActivated - 被激活时')})onDeactivated(() => {console.log('onDeactivated - 被停用时')})}
}

uni-app 中的页面生命周期

在 uni-app 中,除了 Vue 的生命周期外,还有页面特有的生命周期:

export default {// Vue 生命周期created() {console.log('页面实例创建完成')},mounted() {console.log('页面挂载完成')},// uni-app 页面生命周期onLoad(options) {console.log('页面加载,可以获取路由参数:', options)// 适合接收页面参数,初始化数据},onShow() {console.log('页面显示')// 每次页面显示时触发,适合刷新数据},onReady() {console.log('页面初次渲染完成')// 页面初次渲染完成,可以操作 DOM},onHide() {console.log('页面隐藏')},onUnload() {console.log('页面卸载')// 清理工作},onPullDownRefresh() {console.log('用户下拉刷新')// 处理下拉刷新逻辑setTimeout(() => {uni.stopPullDownRefresh()}, 1000)},onReachBottom() {console.log('页面滚动到底部')// 加载更多数据},onShareAppMessage() {console.log('用户点击分享')return {title: '分享标题',path: '/pages/index/index'}}
}

在您的代码中的具体应用

在您之前的个人中心代码中,主要使用了:

export default {data() {return {// 数据定义}},// 计算属性computed: {// 计算属性定义},// uni-app 页面生命周期 - 页面显示时触发onShow() {this.initPage();},methods: {initPage() {this.checkLoginStatus();if (this.isLogin) {this.loadUserInfo();this.loadOrderCount();}},// 其他方法...},// Vue 生命周期 - 组件创建完成后调用created() {console.log('组件创建完成')},// Vue 生命周期 - 组件挂载到页面后调用mounted() {console.log('组件挂载完成')}
}

生命周期执行顺序

页面加载时的完整顺序:

  1. onLoad - 页面加载,接收参数
  2. onShow - 页面显示
  3. beforeCreate - Vue 实例初始化前
  4. created - Vue 实例创建完成
  5. beforeMount - 挂载前
  6. onReady - 页面初次渲染完成
  7. mounted - Vue 实例挂载完成

常用场景建议

export default {onLoad(options) {// ✅ 适合:接收页面参数,根据参数初始化数据this.id = options.idthis.loadData()},onShow() {// ✅ 适合:每次页面显示时刷新数据if (this.needRefresh) {this.refreshData()}},mounted() {// ✅ 适合:DOM 操作,初始化第三方库this.initChart()},created() {// ✅ 适合:数据初始化,但不要操作 DOMthis.initData()},beforeDestroy() {// ✅ 适合:清理工作,清除定时器、取消订阅等clearInterval(this.timer)}
}

注意事项

  1. 不要在 beforeCreate 中访问 data 和 methods
  2. mounted 不会承诺所有子组件都被挂载
  3. updated 不会承诺所有的子组件都被重渲染
  4. uni-app 的 onLoad 在页面生命周期中最早执行

理解这些生命周期钩子可以帮助您在合适的时机执行相应的逻辑,避免常见的错误。

http://www.dtcms.com/a/403371.html

相关文章:

  • 云手机远程控制的作用
  • Vue3》》vite》》 vue-router 和文件路由
  • 个人网站搭建详细步骤线上做汉语教师网站
  • GUIAgent:大模型驱动的浏览器自动化助手
  • Ubuntu gdb attach 权限问题
  • 做设计一般用的素材网站是什么asp 做网站的好处
  • 破解php网站后台密码怎样在wordpress里面调出菜单
  • 构建AI智能体:四十三、智能数据分析机器人:基于Qwen-Agent与Text2SQL的门票分析方案
  • CSS模板语法修复总结
  • 班级网站界面东平网站建设
  • Linux开发工具(编辑器gcc/g++,make/Makefile,gdb)
  • shell编程:sed - 流编辑器(4)
  • 没有网站怎么做推广丹阳网站建设策划
  • 【Linux】Ext系列文件系统(下)
  • 国外网站域名备案邢台网站建设公司排名
  • 技术分享 | 基于Dify的多终端亚马逊云科技智能化运维助手
  • GPU服务器,Docker启动出现could not select device driver ““ with capabilities: [[gpu]].
  • HarmonyOS 5 性能优化全攻略:从启动加速到内存管理
  • 电子商务专业毕业从事什么工作网站建设网站优化相关资讯文章
  • 我用ChatGPT完成选题的全过程复盘
  • 抖音视频图片如何去水印?去水印工具分享
  • 精读《C++20设计模式》:重新理解设计模式系列
  • Windows IIS搭建ASP网站的流程和注意事项
  • 注册一家设计公司流程最新站长seo网站外链发布平台
  • 「ECG信号处理——(26)模拟心电生成器与Pan-Tompkins算法检测R波」2025年9月24日
  • mysql重置管理员密码
  • Protocol VLAN 概念及题目
  • 【ROS 学习笔记】ROS1(Noetic) ROS2(Humble)话题创建全流程梳理
  • 常州企业网站建设公司500m网站
  • 企业版的ODX为何需要制定ODX编写指南(AGL-Authoring Guidelines)