一次性搞懂Vue生命周期的八大钩子函数
何为钩子函数?先看官方文档的说法:
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
简单点来说,钩子函数就是你创建的Vue在初始化、更新数据、销毁时会被自动调用的函数。
八大钩子数分别是:
beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestory,destoryed
接下来咱们慢慢来说
附官网声明周期图
先执行一段代码:注意这里的钩子名固定,与data和methods属于平级关系,如果执行相应的方法,会输出一句话
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="http://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body><div id="app"></div><script>var vm=new Vue({el: "#app",data: {},beforeCreate() {console.log("beforeCreate")},created() {console.log("created")},beforeMount() {console.log("beforeMount")},mounted() {console.log("mounted")},beforeUpdate() {console.log("beforeUpdate")},updated() {console.log("updated")},beforeDestroy() {console.log("beforeDestroy")},destroyed() {console.log("destroyed")},methods: {}});</script>
</body>
<html>
运行结果如下:
一、beforeCreate,created
beforeCreate可以简单的理解为在数据初始化的之前被调用,这时候data和methods尚未没有数据。
created可以理解为在数据初始化之后被调用,这时候data和methods已经被填充了相应的数据。
实验测试:(篇幅所限,只贴出来body中代码,head中代码没变化)
<body><div id="app"></div><script>var vm=new Vue({el: "#app",data: {msg:"在这之间" //添加msg数据},beforeCreate() {console.log("this= "+this) console.log("this.msg= "+this.msg)console.log("this.md= "+this.md)console.log("")},created() {console.log("this= "+this) console.log("this.msg= "+this.msg)console.log("this.md= "+this.md) console.log("")},methods: {md: function(){}, //空方法}});</script>
</body>
运行结果如下:
结果显示在beforeCreate方法与create方法之间完成了资源的注入。
二、beforeMount,mounted
上面实验已经证明Vue中数据已经注入完毕,beforeMount,mounted则是与页面渲染有关
beforeMount在页面尚未被渲染时使用,也就是Vue的数据没有传到页面。
mounted在页面渲染完成之后使用,也就是此时页面已完全取出Vue中的数据。
实验测试:
<body><div id="app"><h1 id="ren">{{msg}}</h1></div><script>var vm=new Vue({el: "#app",data: {msg:"在这之间" //添加msg数据},beforeMount() {let doc = document.querySelector("#ren");//查询到id名为ren的节点console.log(doc) console.log("")},mounted() {let doc = document.querySelector("#ren");console.log(doc) },});</script>
</body>
结果如下:
此时,Vue对象中资源已注入完毕,页面也已经渲染完毕,上述四个方法在页面被加载时自动被执行
三、beforeUpdate,updated
beforeUpdate在页面更新渲染完成后,DOM树发生改变前被调用
updated在页面DOM树改变后被调用
需要注意的是如果只是改变了dom中的数据(data),未对页面造成任何影响,就不会触发beforeUpdate,updated方法。
实验证明:
<body><div id="app"><h1 id="ren"><p v-if="msg"></p></h1></div><script>var vm=new Vue({el: "#app",data: {msg:true //添加msg数据},beforeUpdate() {let a = document.getElementById("ren"); console.log(a.childElementCount)console.log("")},updated() {let a = document.getElementById("ren"); console.log(a.childElementCount)},});</script>
</body>
结果显示:
四、beforeDestory,destoryed
beforeDestory是在Vue组件销毁之前被调用
destoryed在Vue组件销毁之后被调用
这里为了搭建环境,引入了组件的概念(注意由于解析时自上而下,所以组件写在Vue对象前
实验证明:
<body><div id="app"><mytest id="child" v-if="flag"></mytest></div><script>let myname = Vue.component('mytest', {template: '<p>yes</p>',beforeDestroy() {console.log("beforeDestroy被执行")},destroyed() {console.log("destroyed被执行")},});var vm=new Vue({el: "#app",data: {flag: true},components:{"mytest" : myname,},});</script>
</body>
一次性搞懂Vue生命周期的八大钩子函数相关推荐
- vue生命周期方法(钩子函数)初始化数据一般写在哪里
created(el没有初始化,数据已加载完成):mounted(el没有初始化,数据已加载完成): mounted(el没有初始化,数据已加载完成):mounted(el已被初始化,数据已加载完成) ...
- vue函数如何调用其他函数?_从源码中学Vue(一)生命周期中的钩子函数的那点事儿...
欢迎来到我的<从源码中学Vue>专题系列文章,更多精彩内容持续更新中,欢迎关注 :) Vue作为当下前端最流行的框架之一,在国内占绝对的优势.所以接下来我们一起来学习它吧! 我不会像其它人 ...
- 生命周期共有那几个阶段_一文搞懂ReactNative生命周期的进化
前言 React 15生命周期函数 Mounting阶段:组件初始化渲染 Updating阶段:组件更新 Unmounting阶段:组件卸载 进化:React 16生命周期函数 Mounting阶段: ...
- vue.js框架的生命周期:常用钩子函数
//组件实例化之前执行的函数 beforeCreate:function () { alert("组件实例化之前执行的函数") }, //组件实例化完毕执行的函数 created: ...
- vue生命周期中,钩子函数执行顺序
1. 流程图 2.一般的执行顺序(从上往下): beforeCreate 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用. created ...
- 一文带你搞懂vue中的this.$nextTick
文章目录 1.Vue.nextTick(callback) 使用原理 2.created和mounted对比 3.例子说明 4.实际遇到的问题:vue项目中 elementUI 中表格多选框默认选中, ...
- Vue 生命周期钩子
Vue 实例中的生命周期钩子 Vue 框架的入口就是 Vue 实例,其实就是框架中的 view model ,它包含页面中的业务 处理逻辑.数据模型等,它的生命周期中有多个事件钩子,让我们在控制整个V ...
- Vue 生命周期篇探索-第三篇:生命周期-更新流程
文章目录 探索学习 Vue 生命周期篇 第三篇:生命周期-更新流程 生命周期-更新流程 1. mounted(挂载后) 2. beforeUpdate (更新前) 3. Virtual DOM re- ...
- vue 声明周期函数_【Vue】详解Vue生命周期
Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之 ...
最新文章
- Android权限处理分类
- 快速排序python实现
- SQL联合查询中的关键语法
- layui selec下的option出现之前的渲染
- python文字识别库_python做文字识别一行代码都不用!
- 用python画大白_[Python][可视化]matplotlib基础入门
- Spring Boot的启动器Starter详解
- [2018-2019上] 第一次过程性考核成绩
- Maven阿里云与本地仓库配置
- js 数字递增递减_js验证连续两位数字递增或递减和连续三位数字相同
- 广义表的长度和深度怎么算_最新详细个人所得税税率表!快看最新个人所得税怎么算!...
- 江苏计算机职称考试cad,江苏省职称计算机考试Auto_CAD(含答案).doc
- TensorFlow 学习可视化 TensorBoard 简易教程
- 互联网常用系统监控工具
- win10北通手柄没反应_win10 游戏手柄,win10游戏手柄没反应
- 已测试:网上大神写的快手极速版脚本,autojs版快手极速版自动脚本下载
- 月薪过万的前端工程师的自我修养
- 如何在android studio中调用mumu模拟器
- 重装Linux系统后的软件安装 及 常见操作_持续更新...
- IP地址管理(IPAM)解决方案有哪些?
热门文章
- 在线检测笔记本电脑屏幕坏点
- 基于jsp+servlet实现的银行管理系统
- 谷歌商店应用上架最新流程!Googleplay 上架流程(2023版)
- 庄子 内篇 大宗师第六
- springboot+vue汽车租赁系统设计60902
- 使用js来实现分页功能
- 增加字段sql,SQL语句增加列、修改列、删除列
- 计算机毕业设计SSM电商后台管理系统【附源码数据库】
- 冒泡排序(代码+解析)
- python使用statsmodels包中的tsa.acf函数计算时间序列数据所有滞后位置个数(级别)的自相关性、tsaplots函数可视化时间序列数据所有滞后位置个数(级别)的自相关性