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

VUE 页面生命周期基本知识点

在 Vue.js 中,页面生命周期(更准确地说是组件生命周期)指的是组件从创建到销毁的一系列过程。了解这些生命周期钩子可以帮助我们更好地管理组件的状态和行为。以下是 Vue 组件的主要生命周期钩子:

  1. beforeCreate

    • 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
    • 此时组件的选项对象还未被创建,eldata 都不存在。
  2. created

    • 在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,以及 watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
    • 在这个阶段,可以访问组件的 datacomputed 属性,以及调用 methods 方法,但 DOM 还未挂载,因此无法访问 $elvm.$el
  3. beforeMount

    • 在挂载开始之前被调用:相关的 render 函数首次被调用。
    • 在这个阶段,虚拟 DOM 已经创建,但还未挂载到真实 DOM,可以访问 this.$el(它是一个空的虚拟节点),但内容尚未渲染到页面上。
  4. mounted

    • el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个在内联模板中渲染的元素,当 mounted 被调用时 vm.$el 也在文档内。
    • 此时组件已经渲染到页面上,可以访问 DOM,执行依赖于 DOM 的操作。
  5. beforeUpdate

    • 数据更新时调用,发生在虚拟 DOM 打补丁之前。
    • 在这个阶段,data 中的数据是最新的,但虚拟 DOM 还未更新,所以页面还未渲染最新的数据。
  6. updated

    • 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
    • 在这个阶段,虚拟 DOM 已经更新,并且页面也已经渲染最新的数据。但要注意避免在这个钩子中执行过多的操作,因为它可能会引发额外的渲染。
  7. beforeDestroy

    • 实例销毁之前调用。在这一步,实例仍然完全可用。
    • 在这个阶段,组件实例仍然有效,但即将被销毁。你可以在这个钩子中执行一些清理操作,如清除定时器、解绑全局事件、销毁插件对象等。
  8. destroyed

    • Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也都会被销毁。
    • 此时组件已被完全销毁,无法再访问组件实例或 DOM 元素。

需要注意的是,在 Vue 3 中,新增了一个 setup 钩子,它是 beforeCreatecreated 之间的生命周期钩子,用于在组件创建之前设置响应式状态和执行副作用(例如,设置侦听器或计算属性)。但是,由于 setup 是在 beforeCreatecreated 钩子之前调用的,因此在 setup 中无法访问 this。同时,Vue 3 也提供了 Composition API,它提供了一种更灵活的方式来组织和重用逻辑代码。

相关文章:

  • 瑞芯微RV1126——ffmpeg环境搭建
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线编辑word文件,同时保存数据和文件
  • Springboot 自定义线程池 ThreadPoolTaskExecutor
  • 标准库算法
  • Android 观察者模式(OBSERVER)应用详解
  • Spring与Netty底层源码解析
  • 一个基于HOOK机制的微信机器人
  • 论文阅读--ViLD
  • 力扣226. 翻转二叉树(DFS的两种思路)
  • 开源模型应用落地-模型量化-Qwen1.5-7B-Chat-GPTQ-Int8(一)
  • 初见flyway
  • MongoDB 和 MySQL 的对比
  • Flutter 页面布局 Flex Expanded弹性布局
  • 谷歌上架,个人号比企业号好上?“14+20”封测如何解决,你知道了吗
  • 基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析
  • android图片蒙层
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • happypack两次报错的问题
  • Java,console输出实时的转向GUI textbox
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Object.assign方法不能实现深复制
  • passportjs 源码分析
  • Python十分钟制作属于你自己的个性logo
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • webpack4 一点通
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用Swoole加速Laravel(正式环境中)
  • 收藏好这篇,别再只说“数据劫持”了
  • 详解NodeJs流之一
  • 原生Ajax
  • Spring Batch JSON 支持
  • 湖北分布式智能数据采集方法有哪些?
  • # 数仓建模:如何构建主题宽表模型?
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2)(2.10) LTM telemetry
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)Android布局类型(线性布局LinearLayout)
  • (未解决)macOS matplotlib 中文是方框
  • (一)Java算法:二分查找
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)Google Chrome调试JS
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .project文件
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • []串口通信 零星笔记
  • [<MySQL优化总结>]
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件