位置: IT常识 - 正文

Vue--》详解Vue组件生命周期的三个阶段(vue组件入门)

编辑:rootadmin
Vue--》详解Vue组件生命周期的三个阶段

推荐整理分享Vue--》详解Vue组件生命周期的三个阶段(vue组件入门),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue组件总结,vue组件实现,vue组件实现,vue组件实现原理,vue组件使用方法,vue组件入门,vue组成,vue组件入门,内容如对您有帮助,希望把文章链接给更多的朋友!

目录

组件生命周期

创建阶段

beforeCreate阶段:

created阶段:

beforeMount阶段:

mounted阶段:

运行阶段

beforeUpdate阶段:

updated阶段:

销毁阶段

beforeDestroy阶段:

destroyed阶段:

总结


组件生命周期

生命周期(Life Cycle)是指一个组件从 创建 -> 运行 -> 销毁 的整个阶段,强调的是一个时间段。

生命周期函数:是由 vue 框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行。

创建阶段beforeCreate阶段:

我们在初始化事件和生命周期函数时,组件的 props/data/methods尚未被创建,都处于不可用状态。

<script>export default { props:['info'], data(){ return { message:'hello test' } }, methods:{ show(){ console.log('调用了 Test 组件的 show 方法'); } }, // 创建阶段的第一个生命周期 beforeCreate(){ console.log(this.info); //props console.log(this.message); //data this.show() //methods },}</script>

 因为不能使用 props/data/methods 但是我调用了,所有控制台报错。

created阶段:

我们已经初始化好 props、data、methods了,组件的 props/data/methods已创建好。都处于可用状态,但是组件的模板结构尚未完成!

<script>export default { props:['info'], data(){ return { message:'hello test' } }, methods:{ show(){ console.log('调用了 Test 组件的 show 方法'); } }, // 创建阶段的第二个生命周期函数 created(){ console.log(this.info); console.log(this.message); this.show() }}</script>

created生命周期函数非常常用,在日常项目开发中经常在它里面调用 methods 中的方法,请求服务器的数据,并且把请求到的数据,转存到 data 中,供 template 模板渲染的时候使用!

<template> <div> <h2>test组件--{{nums.length}}</h2> </div></template><script>export default { props:['info'], data(){ return { message:'hello test', nums:[] } }, methods:{ show(){ console.log('调用了 Test 组件的 show 方法'); }, initlist(){ const xhr = new XMLHttpRequest() xhr.addEventListener('load',()=>{ const result = JSON.parse(xhr.responseText) console.log(result); this.nums = result.data }) xhr.open('GET','请求的接口') xhr.send() } }, created(){ this.initlist() }}</script><style lang="less" scoped> div{ background-color: #f00; }</style>beforeMount阶段:

基于数据和模板,在内存中编译生成HTML结构。将要把内存中编译好的HTML结构渲染到浏览器中。此时浏览器中还没有当前组件的DOM结构。

<template> <div> <h2 id="myid">test组件--{{nums.length}}</h2> </div></template><script>export default { props:['info'], data(){}, methods:{}, beforeCreate(){}, created(){}, beforeMount(){ console.log('beforeMount'); const dom = document.querySelector('#myid') console.log(dom); }}</script>

mounted阶段:

用内存中编译生成的HTML结构替换掉el属性指定的DOM元素,已经把内存中的HTML结构,成功渲染到了浏览器之中,此时浏览器中已经包含了当前组件的DOM结构。

<template> <div> <h2 id="myid">test组件--{{nums.length}}</h2> </div></template><script>export default { mounted(){ const dom = document.querySelector('#myid') console.log(dom); }}</script>

vue完成模板解析并把初识的真实DOM元素放在页面后(挂载完毕)调用 mounted。

<template> <div> <h2 :style="{opacity}">欢迎学习Vue</h2> </div></template><script>export default { data(){ return { opacity:1 } }, mounted(){ setInterval(()=>{ //我们在使用箭头函数时,this的指向mounted自动帮我们设置好是 vm 了 this.opacity-=0.01 if(this.opacity <= 0) this.opacity = 1 },6) },}</script>

运行阶段

所谓运行阶段就是用户与组件产生交互

beforeUpdate阶段:Vue--》详解Vue组件生命周期的三个阶段(vue组件入门)

这个函数的触发的必要前提是,我们修改了 data 里面的数据。将要(注意:仅仅是将要,还没有呢)根据变化过后最新的数据,重新渲染组件的模板结构。

<template> <div> <h2 id="myid">{{message}}</h2> <button @click="message+='~'">点击修改message值</button> </div></template><script>export default { data(){ return { message:'hello test', } }, beforeUpdate(){ console.log('beforeUpdate'); //说明:点击按钮修改data值才能触发这个函数 console.log(this.message); //打印修改后的值 const dom = document.querySelector('#myid') console.log(dom.innerHTML); //打印整个文本,但并没有出现我们修改后的值,说明页面并没有重新渲染 }}</script>

updated阶段:

已经根据最新的数据,完成了组件的DOM结构的重新渲染。注意:当数据变化之后,为了能操作到最新的 DOM 结构,必须把代码写到 updated 生命周期函数中。

<template> <div> <h2 id="myid">{{message}}</h2> <button @click="message+='~'">点击修改message值</button> </div></template><script>export default { props:['info'], data(){ return { message:'hello test', } }, updated(){ console.log('updated'); console.log(this.message); //打印修改后的值 const dom = document.querySelector('#myid') console.log(dom.innerHTML); //打印整个文本,但出现了我们修改后的值,说明页面被重新渲染 }}</script>销毁阶段

完全销毁一个实例。清理它(vm)与其它实例的连接,接绑它的全部指令及事件监听器。

beforeDestroy阶段:

将要销毁此组件,此时尚未销毁,组件还处于正常工作状态。在这阶段一般做一些首尾工作。

<template> <div> <h2 id="myid">{{message}}</h2> <button @click="message+='~'">点击修改message值</button> </div></template><script>export default { props:['info'], data(){ return { message:'hello test', } }, beforeDestroy(){ console.log('beforeDestroy'); }}

destroyed阶段:

销毁当前组件的数据侦听器、子组件、事件监听等,组件已经被销毁,此组件在浏览器中对应的DOM结构已被完全移除!

直接暴力的将vm干掉,页面就不能再进行交互。设置透明的按钮也就作废了。

<template> <div> <h2 :style="{opacity}">欢迎学习Vue</h2> <button @click="opacity = 1">透明度设置为1</button> <button @click="stop">点我停止变化</button> </div></template><script>export default { data(){ return { opacity:1 } }, methods:{ stop(){ // clearInterval(this.timer) this.$destroy() } }, mounted(){ // const dom = document.querySelector('#myid') // console.log(dom); console.log('mounted',this); this.timer = setInterval(()=>{ console.log('setInterval'); this.opacity-=0.01 if(this.opacity <= 0) this.opacity = 1 },6) }, beforeDestroy(){ clearInterval(this.timer) console.log('vm即将被销毁'); }}</script><style lang="less" scoped> div{ // background-color: #f00; }</style>

1)销毁后借助Vue开发者工具看不到任何信息。

2)销毁后自定义事件会失效,但原生的DOM事件依然有效

3)一般不会在beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了

总结

生命周期:

1)又称:生命周期回调函数、生命周期函数、生命周期钩子。

2)含义:vue在关键时刻帮助我们调用一些特殊名称的函数。

3)生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。

4)生命周期函数中的this指向是 vm 或 组件实例对象。

常用的生命周期钩子:

1)mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等(初始化操作)

2)beforeDestroy:清除定时器、绑定自定义事件、取消订阅消息等(收尾工作)

下面是实例生命周期的图表。你现在并不需要完全理解图中的所有内容,但以后它将是一个有用的参考。

本文链接地址:https://www.jiuchutong.com/zhishi/299292.html 转载请保留说明!

上一篇:机器学习——BP神经网络详细介绍及案例Python代码实现

下一篇:uni.getSystemInfo(OBJECT)

  • 苹果11有口罩模式吗(苹果11带口罩)

    苹果11有口罩模式吗(苹果11带口罩)

  • 苹果手表字体变大怎么调回来(苹果手表字体变大)

    苹果手表字体变大怎么调回来(苹果手表字体变大)

  • 腾讯会议怎么开启摄像头(腾讯会议怎么开会议房间)

    腾讯会议怎么开启摄像头(腾讯会议怎么开会议房间)

  • Redmi Note 9 Pro Max的电池容量是多少

    Redmi Note 9 Pro Max的电池容量是多少

  • vivo x50 pro+屏幕尺寸多大(vivox50pro屏幕绿色竖线怎么处理)

    vivo x50 pro+屏幕尺寸多大(vivox50pro屏幕绿色竖线怎么处理)

  • 抖音怎么开美颜和滤镜(抖音怎么开美颜视频聊天)

    抖音怎么开美颜和滤镜(抖音怎么开美颜视频聊天)

  • p20pro后盖碎了会影响使用吗(华为手机p20pro后盖碎了)

    p20pro后盖碎了会影响使用吗(华为手机p20pro后盖碎了)

  • 附件添加到正文失败(附件添加到正文后,附件里还会有内容还是空白的)

    附件添加到正文失败(附件添加到正文后,附件里还会有内容还是空白的)

  • 苹果手机相册怎么隐藏照片(苹果手机相册怎么打马赛克)

    苹果手机相册怎么隐藏照片(苹果手机相册怎么打马赛克)

  • 淘宝客定向计划是什么意思(淘宝客定向计划名称怎么写)

    淘宝客定向计划是什么意思(淘宝客定向计划名称怎么写)

  • 钉钉直播举报人是匿名吗(在钉钉举报直播间老师能看到是谁举报的吗?)

    钉钉直播举报人是匿名吗(在钉钉举报直播间老师能看到是谁举报的吗?)

  • 充电宝充的特别慢是什么原因(充电宝充的特别慢发烫怎么回事)

    充电宝充的特别慢是什么原因(充电宝充的特别慢发烫怎么回事)

  • 手机语音播放失败怎么回事(手机语音播放失败怎么恢复正常)

    手机语音播放失败怎么回事(手机语音播放失败怎么恢复正常)

  • opporeno3是不是曲面屏(opporeno3有曲面屏吗)

    opporeno3是不是曲面屏(opporeno3有曲面屏吗)

  • 手机摇步器对手机有损害吗(摇步器会把手机摇坏吗)

    手机摇步器对手机有损害吗(摇步器会把手机摇坏吗)

  • 如何去掉word里面的换行符(如何去掉word里面的彩色条)

    如何去掉word里面的换行符(如何去掉word里面的彩色条)

  • 手机怎么上邮箱(手机怎么上邮箱发送文件)

    手机怎么上邮箱(手机怎么上邮箱发送文件)

  • 三星手机来电设置在哪里(三星手机来电设置音量键静音)

    三星手机来电设置在哪里(三星手机来电设置音量键静音)

  • 安卓emoji怎么调肤色(安卓手机 emoji)

    安卓emoji怎么调肤色(安卓手机 emoji)

  • 嗨来电这个软件安全吗(嗨来电下载安装)

    嗨来电这个软件安全吗(嗨来电下载安装)

  • iOS设备怎么取消App Store应用订阅(苹果手机怎么去除设备账号)

    iOS设备怎么取消App Store应用订阅(苹果手机怎么去除设备账号)

  • appium和selenium区别(比selenium好用)

    appium和selenium区别(比selenium好用)

  • maters和mate20rs区别(mate20rs和mate20区别)

    maters和mate20rs区别(mate20rs和mate20区别)

  • 织梦CMS地图sitemap.html更改路径和模板(织梦cms怎么样)

    织梦CMS地图sitemap.html更改路径和模板(织梦cms怎么样)

  • 所得税季度预缴纳税申报表
  • 水资源费如何入账
  • 个人独资企业要承担无限责任吗
  • 油库存油租赁
  • 个体定期定额怎么征税2023
  • 差额征收如何做账
  • 托收承付和委托收款的含义和相同之处
  • 出借包装物收到押金
  • 小规模费用发票多有什么用途
  • 不得开具增值税专票情形包括
  • 三证合一后税务登记证要收回吗
  • 企业合并的相关税费计入哪里
  • 产品成本核算过程
  • 收到电费发票做账摘要怎么写
  • 营业外支出罚款要交税吗
  • 物业公司收到一年物业费开具发票后如何确认收入
  • 哪些费用可以计入待摊费用
  • 应交增值税最后到哪了
  • 孵化器 怎么赚钱
  • 文化事业建设费的征收范围
  • 未开发票申报
  • 借老板的现金存入银行怎么做账?
  • 原材料账户期末贷方余额反映
  • 企业接受非现金资产投资的账务处理
  • 按适用税率征税货物及劳务销售额
  • 保户储金科目属于保险公司的什么科目
  • 怎样接收电子承兑汇票流程视频
  • win10卸载deepin
  • 苹果电脑怎么升级系统到最新版本
  • 宏基笔记本电脑售后电话
  • 应交税费和应交税金的区别属于什么科目
  • 什么是盈余公积和资本公积
  • 以公允价值计量的投资性房地产
  • 华为鸿蒙harmonyos官网4.0升级
  • php+redis
  • php面向对象实例
  • 税控设备抵减增值税会计处理
  • php curl_multi_init
  • 为什么连接无线网超时
  • 固定资产清理如何结转
  • 餐费发票怎么做账务处理
  • 收付控制状态不正常
  • vue导入动图
  • java使用循环结构输出九九乘法表
  • 简单的画
  • get请求有哪些
  • 融资租赁手续费一次性还是摊销
  • 残疾人保障金所属期怎么填
  • 支付所得税属于经营活动产生的现金流量吗
  • percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
  • 销项发票属于哪个科目
  • 城建税免征怎么记账
  • 无形资产摊销年限按法律规定还是企业估计
  • 网上代增值税专用发票
  • 固定资产计提折旧的原则
  • 发票开具与小票的关系是怎样的?
  • 加计扣除产生的利润可以分配吗
  • 完税凭证抵扣进项税额分录
  • 房地产开发企业会计制度
  • 跨年度未开发票第二年如何做确认收入?
  • 商贸企业固定资产可以一次性扣除吗?
  • 新单位怎么建账
  • 关税用什么会计科目
  • myeclipse连接mysql失败
  • linux用
  • windows2008
  • linux awk排序
  • win10 ie无法使用
  • mac电脑怎么装win10
  • cocos2dx 3.17
  • [置顶]bilinovel
  • python的linux
  • python的删除
  • python标准模板库
  • script标签的defer和async
  • nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
  • Android之BroadcastReceiver
  • python文件文件夹操作
  • 个体工商户票种核定金额应该填多少
  • 开税票锁机怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设