位置: 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)

  • 在百度知道和问答中怎样做营销推广(百度知道和百度一下的区别)

    在百度知道和问答中怎样做营销推广(百度知道和百度一下的区别)

  • xs支持无线充电吗(xs能无线充吗)

    xs支持无线充电吗(xs能无线充吗)

  • 拼多多没有电脑版本吗(拼多多没有电脑怎么退店)

    拼多多没有电脑版本吗(拼多多没有电脑怎么退店)

  • ipadair2是第几代(ipadair2是第几代的)

    ipadair2是第几代(ipadair2是第几代的)

  • 手机照片是jpg格式吗(手机照片是jpg格式怎么办)

    手机照片是jpg格式吗(手机照片是jpg格式怎么办)

  • 屏幕和手机分离怎么办(屏幕和手机分离修要多少钱)

    屏幕和手机分离怎么办(屏幕和手机分离修要多少钱)

  • 手机前置摄像头进水了模糊怎么办(手机前置摄像头有红点闪烁是什么?)

    手机前置摄像头进水了模糊怎么办(手机前置摄像头有红点闪烁是什么?)

  • 音频的格式有哪些(音频的格式有哪些后缀)

    音频的格式有哪些(音频的格式有哪些后缀)

  • 手机数据网络连接不上是什么原因(手机数据网络连不上)

    手机数据网络连接不上是什么原因(手机数据网络连不上)

  • 华为c0l一al10是什么型号(华为c0r-al10)

    华为c0l一al10是什么型号(华为c0r-al10)

  • 携程账号忘记了怎么查(携程账号密码忘了怎么找回)

    携程账号忘记了怎么查(携程账号密码忘了怎么找回)

  • 小米6x开不了机怎么办(小米6x开不了机充电呼吸灯闪烁)

    小米6x开不了机怎么办(小米6x开不了机充电呼吸灯闪烁)

  • 苹果11pro不能用充电宝了吗(苹果11pro不能用华为充电头吗?)

    苹果11pro不能用充电宝了吗(苹果11pro不能用华为充电头吗?)

  • 苹果耳机充电时候灯不亮是正常的吗(苹果耳机充电时间多长)

    苹果耳机充电时候灯不亮是正常的吗(苹果耳机充电时间多长)

  • ios10不能屏幕录制(iphone屏幕录制不能录视频)

    ios10不能屏幕录制(iphone屏幕录制不能录视频)

  • 怎么查询小米手机sn码(怎么查询小米手机的激活日期)

    怎么查询小米手机sn码(怎么查询小米手机的激活日期)

  • 不支持双4g是什么意思(不支持双卡使用cdma)

    不支持双4g是什么意思(不支持双卡使用cdma)

  • 电脑特殊符号怎么打出来(电脑特殊符号怎么输)

    电脑特殊符号怎么打出来(电脑特殊符号怎么输)

  • cn域名免备案吗(免备案域名在线购买)

    cn域名免备案吗(免备案域名在线购买)

  • 多闪和抖音的区别(多闪和抖音有什么关系)

    多闪和抖音的区别(多闪和抖音有什么关系)

  • 默认网关怎么填写(dhcp默认网关怎么填)

    默认网关怎么填写(dhcp默认网关怎么填)

  • 抖音转发的视频怎么删除(抖音转发的视频无法查看怎么回事)

    抖音转发的视频怎么删除(抖音转发的视频无法查看怎么回事)

  • 小米5呼叫转移怎么解除(小米呼叫转移怎么取消?)

    小米5呼叫转移怎么解除(小米呼叫转移怎么取消?)

  • wifi双频合一要不要开(wifi双频合一有什么好处)

    wifi双频合一要不要开(wifi双频合一有什么好处)

  • 怎样投诉天猫商家(怎么投诉天猫卖家让他受到最严厉的惩罚)

    怎样投诉天猫商家(怎么投诉天猫卖家让他受到最严厉的惩罚)

  • iPhoneXSmax怎么录屏(iphonexsmax怎么录屏)

    iPhoneXSmax怎么录屏(iphonexsmax怎么录屏)

  • 压缩文件打不开是什么原因详情(下载的压缩文件打不开)

    压缩文件打不开是什么原因详情(下载的压缩文件打不开)

  • 第四季度所得税没有计提怎么做账
  • 车辆保险的车船税怎么算
  • 用房租入股
  • 公司买车计算方式
  • 农民合作社交哪些税
  • 中药饮片增值税税率
  • 资产负债表日后调整事项与非调整事项的区别
  • 经营杠杆系数分类
  • 培训学校预收学费要交税吗
  • 私人帐户可以给别人用吗
  • 消费税的征收方式是代收代缴
  • 医疗器械技术服务合同
  • 机打发票多久可以作废
  • 增值税发票季报
  • 外购商品用于招待怎么做账
  • 交叉持股的合并财务报表
  • 商品流通企业会计零售业务核算
  • 业务招待住宿费发票可以抵扣进项税吗
  • 应收账款未计提坏账能直接核销
  • 为什么WIN10系统打在画面进不去
  • 收到退款的会计分录
  • 人力资源服务代缴社保税率是多少
  • scvc8.exe是什么
  • 未签订租赁合同租金如何确定
  • 汇算清缴期结束后
  • 其他应收款的会计处理
  • 财务管理集权与分权
  • 巨浪向我冲来改为拟人句
  • 取得增值税发票的认证期限是多久?
  • PHP:imagecopyresampled()的用法_GD库图像处理函数
  • 购买免税农产品的会计分录
  • 【torch.nn.Parameter 】参数相关的介绍和使用
  • echarts怎么样
  • less中使用js变量
  • Joe是一款优雅功能强大的Typecho主题功能多上手快
  • 社保费用可以提前从工资扣吗
  • 2022年最新版微信
  • mongodb添加用户并授权
  • 月入一万怎么样
  • 投资收益账户属于所有者权益类吗
  • 事故赔偿金分配
  • 在建工程借款利息计入哪里
  • 汇算清缴后取得上一年发票
  • 坏账核销在企业所得税汇算清缴的填写
  • 建筑企业收挂靠公司管理费如何做账?
  • 其他应付款能否直接做实收资本的账务处理
  • 车贷管理费合理吗
  • 资产负债表的预付款项项目应根据预付账款
  • 应收帐款表
  • 接受代销货物的会计分录
  • 行政事业单位固定资产计提折旧
  • 三代个税返还算什么费用
  • 生产成本和制造费用期末有余额吗
  • 私营公司固定资产怎么查
  • sqlserver游标的使用
  • sql server 复制数据库具体操作图解
  • mysql改造
  • windows 开始
  • 手动防止Ping攻击方法(无需防火墙)
  • win7的开始菜单在哪里
  • wind10升级
  • 红石怎么启动
  • marvell 网卡驱动
  • Win10年度更新将统一Insider与Xbox One预览体验
  • opengl纹理贴图正方体六个面
  • css使用教程
  • css网站布局实录 pdf
  • python内置函数open()的参数用来指定打开文本文件
  • node.js原生支持的编码格式
  • js数组菜鸟教程
  • 深入理解linux内核第三版
  • python教程目录
  • unity vtext
  • 自己搭配电脑
  • js编写一个标准的单例模式类
  • python默认方法
  • 天津市税务总局现任领导
  • 如何开通税务系统
  • 员工持股计划与股权激励哪个好
  • 货车违章查哪个部门
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设