【Vue.js 入门与实战】--生命周期函数-组运行和销毁阶段的钩子函数

简介: 一、组件运行阶段二、组件运行阶段代码演示三、组件销毁阶段四、总结

生命周期函数-组运行和销毁阶段的钩子函数

 

目录

一、组件运行阶段

二、组件运行阶段代码演示

三、组件销毁阶段

四、总结

 

 

一、组件运行阶段

上节课学习了创建阶段的生命周期函数,比较重要的两个函数是created mounted

created 阶段,当执行到 created 函数,data methods 就已经被初始化好,当执行到 mounted 时页面上的 DOM 元素是最新的,在 beforemount 阶段内存是最新的,但是页面是旧的。

 

如果要通过某些插件操作页面上的 DOM 节点,最早要在mounted 中进行。只要执行完了 mounted 就表示整个 Vue 实例已经初始化完毕了,此时,组件已经脱离了创建阶段,进入到了运行阶段。

 

运行阶段钩子函数图:

image.png 

以上是组件运行阶段的生命周期函数,只有两个函数,分别是 beforeupdate updated ,当 when date changes 中的 data 改变时,就会触发 beforeupdate,如果 data 上的数据从实例初始化完成后,没有发生过改变,那么beforeupdate updated 函数就不会执行。

 

beforeupdate updated执行次数最少是0次,0次代表数据从未改变,最多是无数次,即 data 改变几次,就会触发函数几次。

 

总结:这两个事件会根据 data 数据的改变有选择性的触发0次到多次。


二、组件运行阶段代码演示


修改msg ”@click=”msg””no”>

//当点击时不用写方法,可以直接修改,当数据一被修改,就会触发 beforeupdate()

 

//以下是运行中的两个事件

Beforepdate(){

Console.log(‘界面上元素的内容

‘+document.getElementById(‘h3’).innerText)

console.log('data中的 msg 数据是:’ + this.msg)

}

 

表示界面没有被更新,数据已经被更新了。因为Beforepdate 被触发表示数据发生了改变。

数据永远是最新的,判断界面是否为最新的。

 

这里有两个东西,一个是界面,一个是 data 中的 module ,第一步修改 module module通过 vm 调度者把数据同步到页面中,当数据被更新时,在beforeupdate 函数中,通过

Console.log(document.getElementById(‘h3’).innerText)

获取页面上的数据判断页面是否和数据同步。

 

刷新页面没有输出任何内容,证明 Beforepdate 没有被执行。因为组件创建完毕之后,ms 一直等于 没有发生过改变。可以通过触发按钮使 msg 发生改变。

 

刷新页面,点击修改 msg 按钮,查看运行结果为:界面上的元素:ok

data中的 msg 数据是 no

得出结论,当执行 beforedate 时,页面中显示的数据还是旧的,此时,data 数据是最新的,页面尚未和最新的数据保持同步。

 

执行完 beforupdate 函数就会进入 Virtual Dom re-render and patch:这一步执行的是:

先根据 data 中最新的数据,在内存中,重新渲染出一份最新的内存 DOM 树,当最新的内存 DOM 树被更新之后,会把最新的内存 DOM 树,重新渲染到真实的页面中去,这时,就完成了数据从 data (Model)-> view (视图层)的更新。

 

更新完之后进入到 updated ,在 updated 中再重新输出页面上元素的内容是新的。因为已经重新渲染完毕了。

Updated(){

Console.log(‘界面上元素的内容

‘+document.getElementById(‘h3’).innerText)

console.log('data中的 msg 数据是:’ + this.msg)

刷新页面,点击修改 msg 按钮,

查看运行结果为:界面上的元素:no

data中的 msg 数据是: no

说明当执行updated 时,页面和 data 数据已经保持同步,都是最新的。

 

 

三、组件销毁阶段

当组件运行完后有个销毁的过程,销毁就是在页面上有些实例,当关闭页面,就会执行销毁的过程。

 

销毁阶段钩子函数的特点:

当执行 beforeDestroy 钩子函数时,Vue 实例就从运行阶段,进入到了销毁阶段;当执行 beforeDestroy 时,实例所有的 data 和所有的 methods ,以及过滤器、指令....都处于可用状态,此时,还没有真正执行销毁的过程;

 

当执行到 destroyed 函数时,组件已经被完全销毁了。此时,组件中所有的数据、方法、指令、过滤器..… 都已经不可用。

销毁阶段图

image.png

 

 

四、总结

在生命周期函数中最重要的是 created 函数和 mounted 函数。

 

对于 beforeupdate 函数要了解执行时机,当数据改变,会触发beforeupdate函数,在执行 beforeupdate 函数时页面是旧的,执行到 updated 函数,页面会变成新的。


相关文章
|
15天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
15天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
10 0
|
16天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
21天前
|
JavaScript
vue实例的data属性,可以在哪些生命周期中获取到
Vue实例的`data`属性在`beforeCreate`、`created`和`beforeMount`阶段已可访问。此时,虽能使用数据,但事件监听和DOM操作不可行。`beforeCreate`时数据可访问,但未初始化观测和事件;`created`时数据完全可用,但未挂载到DOM;`beforeMount`时仍可访问数据,DOM挂载未开始。
28 3
|
26天前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
17 5
|
2天前
|
缓存 JavaScript 前端开发
js的入口函数,入口函数的作用
js的入口函数,入口函数的作用
12 4
|
2天前
|
缓存 JavaScript 前端开发
vue项目实战:实战技巧总结(中)
vue项目实战:实战技巧总结
28 1
|
25天前
|
JavaScript
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停恢复的特殊函数,用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。
16 6
|
3月前
|
JavaScript 前端开发 程序员
如何像人类一样写JavaScript代码(包会)之函数参数和返回值
如何像人类一样写JavaScript代码(包会)之函数参数和返回值
118 1
|
9月前
|
JavaScript
js中函数的传递参数
js中函数的传递参数
91 0