网站首页 > 教程分享 正文
6.1 引出生命周期
生命周期函数,特殊的时间点调用特殊的函数
某个时间点调用某个函数,这些函数统称为生命周期函数
//vue完成模板的解析并把真实的DOM元素放入页面后(挂载完毕)调用mounted
//第一次叫挂载,以后就叫更新了
// 关键时刻调关键函数
mounted() {
// console.log('mounted')
setInterval(() => {
this.opacity -= 0.01
if (this.opacity <= 0) this.opacity = 1
}, 16)
},
6.2 分析生命周期
Vue 实例有?个完整的生命周期,也就是从new Vue()、初始化事件(.once事件)和生命周期、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等?系列过程,称这是Vue的生命周期。
--挂载流程
- beforeCreate(创建前):数据监测(getter和setter)和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
- created(创建后):实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el属性。
- beforeMount(挂载前):在挂载开始之前被调用,相关的render函数首次被调用。此阶段Vue开始解析模板,生成虚拟DOM存在内存中,还没有把虚拟DOM转换成真实DOM,插入页面中。所以网页不能显示解析好的内容。
- mounted(挂载后):在el被新创建的 vm.$el(就是真实DOM的拷贝)替换,并挂载到实例上去之后调用(将内存中的虚拟DOM转为真实DOM,真实DOM插入页面)。此时页面中呈现的是经过Vue编译的DOM,这时在这个钩子函数中对DOM的操作可以有效,但要尽量避免。一般在这个阶段进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等等
--更新流程
- beforeUpdate(更新前):响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染(数据是新的,但页面是旧的,页面和数据没保持同步呢)。
- updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
--销毁流程
- beforeDestroy(销毁前):实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。在这个阶段一般进行关闭定时器,取消订阅消息,解绑自定义事件。
- destroyed(销毁后):实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
6.3 总结生命周期
创建-挂载-更新-销毁
<div id="root">
<h2 :style="{opacity}">欢迎学习vue</h2>
<button @click="opacity='1'">点我透明度变1</button>
<button @click="stop">点我停止变换</button>
</div>
<script>
// 创建 vm 实例对象
const vm = new Vue({
el: '#root',
data: {
opacity: 1
},
methods: {
stop() {
// clearInterval(this.timer)
this.$destroy() //直接销毁vm 另一个按钮就点不动了
}
},
mounted() {
console.log('mounted', this)
this.timer = setInterval(() => {
this.opacity -= 0.01
if (this.opacity <= 0) this.opacity = 1
}, 16)
},
beforeDestroy() {
console.log('vm即将被销毁')
clearInterval(this.timer)
}
});
</script>
猜你喜欢
- 2024-09-10 JavaScript 定时器和延时器(js定时器执行顺序)
- 2024-09-10 彻底搞懂HTTP协议 - 天天造轮子(http协议的工作原理)
- 2024-09-10 导航栏案例:用到缓动函数(缓动类型)
- 2024-09-10 打字效果的文字制作(打字效果视频)
- 2024-09-10 Vue实战088:简单的验证码倒计时功能实现
- 2024-09-10 微信小程序开发(2):猜拳游戏全过程详解
- 2024-09-10 用多了各种组件库的你还会用原生JS写轮播图吗?
- 2024-09-10 canvas绘制图片并实现一个图片放大器
- 2024-09-10 Window 对象(window对象的子对象)
- 2024-09-10 微信刷屏的「给我一面国旗」怎么才能做到,技术原理是什么?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)