vue实例的生命周期详解

2023-05-16

Vue实例的生命周期

简介

此篇文章说的是最简单的单个VUE组件的生命周期。
官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程。从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期
在这里插入图片描述
为了便于理解,再代码中创建vue实例,并在每个钩子函数中console出每个生命周期的el,data和message。此段代码可以直接复制。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
</head>
<body>

<div id="app">
    <p>{{ message }}</p>
    <h1>{{message + '这是在outer HTML中的'}}</h1>
</div>

<script type="text/javascript">

    var app = new Vue({
        el: '#app',
        data: {
            message : "xuxiao is boy"
        },
        template:"<h1>{{message +'这是在template中的'}}</h1>",
        // render: function(createElement) {
        //     return createElement('h1', 'this is createElement')
        // },
        beforeCreate: function () {
            console.group('beforeCreate 创建前状态===============》');
            console.log("%c%s", "color:red" , "el     : " + this.$el); //undefined
            console.log("%c%s", "color:red","data   : " + this.$data); //undefined
            console.log("%c%s", "color:red","message: " + this.message)
        },
        created: function () {
            console.group('created 创建完毕状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el); //undefined
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        beforeMount: function () {
            console.group('beforeMount 挂载前状态===============》');
            console.log("%c%s", "color:red","el     : " + (this.$el)); //已被初始化
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        mounted: function () {
            console.group('mounted 挂载结束状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el); //已被初始化
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        beforeUpdate: function () {
            console.group('beforeUpdate 更新前状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message);
        },
        updated: function () {
            console.group('updated 更新完成状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message);
        },
        beforeDestroy: function () {
            console.group('beforeDestroy 销毁前状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message);
        },
        destroyed: function () {
            console.group('destroyed 销毁完成状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message)
        }
    })
</script>
</body>
</html>

输出结果分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

详细分析流程图

通过代码大概了解整个流程之后再回头拆开来看官网流程图。生命周期可以分为四个阶段,初始化阶段,模板编译阶段,挂在阶段,已挂载和卸载阶段。

初始化阶段

在这里插入图片描述

模板编译阶段

在这里插入图片描述
这块比较复杂,观察刚才那段代码前面部分

   var app = new Vue({
        el: '#app',
        data: {
            message : "xuxiao is boy"
        },
        template:"<h1>{{message +'这是在template中的'}}</h1>",
        // render: function(createElement) {
        //     return createElement('h1', 'this is createElement')
        // },

首先会判断有没有el选项,如果有就继续,没有就停止生命周期。随后判断是否有template选项(此段代码中有),于是就编译template选项为render function。运行代码得到网页如下
在这里插入图片描述
若没有template选项,就把outerHTML当做template编译为render function。(把此段代码中的template选项注释掉),得到网页如下
在这里插入图片描述
这是把outerHTML当作模板编译了

<div id="app">
    <p>{{ message }}</p>
    <h1>{{message + '这是在outer HTML中的'}}</h1>
</div>

如果把实例中render function选项的注释去掉,则直接用render function里的,得到网页如下
在这里插入图片描述
所以按优先级来说 render function>template>outerHTML

挂载阶段

在这里插入图片描述

已挂载和卸载

在这里插入图片描述

具体使用

在这里插入图片描述
在这里插入图片描述
平时用的比较多的是mouted和created
在这里插入图片描述
因为在created时还没完成挂载,无法通过id获得DOM元素,所以chart.js里的该操作要使用在mounted下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue实例的生命周期详解 的相关文章

随机推荐

  • slf4j使用xml配置日志不能显示的问题

    在我使用slf4j的xml配置方式的时候 一直加载不出xml的配置文件 导致里面的设置不能被读取 控制台一直打印不去日志信息 正在寻找解决办法 报的错误是 log4j WARN Please initialize the log4j sys
  • Steghide使用教程及其密码爆破

    Steghide使用教程及其密码爆破 工具介绍 Steghide是一款开源的隐写术软件 xff0c 它可以让你在一张图片或者音频文件中隐藏你的秘密信息 xff0c 而且你不会注意到图片或音频文件发生了任何的改变 而且 xff0c 你的秘密文
  • Navicat如何连接远程服务器的MySQL

    前言 xff1a 运行环境及工具 Navicat for Mysql 腾讯云轻量级服务器一台 xff08 Centos 7 xff09 Mysql 8 0 24 xff08 远程服务器内安装的 xff09 Xshell7 xff08 连接操
  • 警告!你的隐私正在被上亿网友围观偷看!

    你的隐私正在被上亿万网友围观偷看 xff01 事情要从一款被推荐到烂的软件说起 Everything 这个软件想必很多同学都有听过 xff0c 是一款非常好用的文件搜索软件 xff0c 很多同学把它设置为开机必启动项之一 简单来说 Ever
  • Ubuntu安装JDK教程

    Ubuntu安装JDK教程 jdk的下载和安装 xff1a 1 打开浏览器 xff0c 输入jdk的官网地址 xff1a https www oracle com java technologies javase downloads htm
  • 面试官:如何让主线程等待所有的子线程执行结束之后再执行?我懵了

    使用Thread的join方法 package com qcy testThreadFinish 64 author qcy 64 create 2020 09 09 17 05 23 public class Case1 public s
  • 【亲测可用】 Mac/Linux 安装中文版 man 帮助命令

    Mac Linux 安装中文版 man 帮助命令 其中的需要下载的两个 安装包我上传到 csdn 了 xff0c 网络不好的可以直接 获取 不需要用 wget 下在 xff0c 虽然 wget 是很稳定 xff0c 但是国内的网络 还是太菜
  • 安卓android一种沉浸式状态栏和导航栏并可设置渐变和图片的方法

    安卓android一种沉浸式状态栏和导航栏并可设置渐变和图片的方法 介绍 网络上流传的状态栏导航栏沉浸的方式有很多 xff0c 但是在我使用的时候都失效了 xff0c 在官网也没找到合适的例子达到期望 xff0c 根据情况判断是由于目前版本
  • Python 循环结构

    在python中 xff0c 循环结构有for循环和while循环两种 1 while循环 while循环结构格式 xff1a while 条件表达式 xff1a 条件执行体 当条件表达式判断为真时 xff0c 就执行条件执行体中的内容 如
  • windows terminal + oh-my-posh 2022 [保姆级]配置教程

    windows terminal 43 oh my posh 2022 版配置教程 目录 windows terminal 43 oh my posh 2022 版配置教程 总览 1 下载powershell 2 安装字体 下载并安装字体至
  • DataBinding的基本使用(五)

    DataBinding的基本使用 五 DataBinding基本使用包括以下内容 xff1a 单纯的摆脱findviewbyid 绑定基本数据类型及String 绑定Model数据 绑定事件 通过静态方法转换数据类型 通过运算符操作数据 自
  • idea快捷键大全

    实用快捷键 Ctrl 43 或 Ctrl 43 Shift 43 注释 xff08 或者 xff09 Ctrl 43 D 复制行 Ctrl 43 X 删除行 快速修复 alt 43 enter modify cast 代码提示 alt 43
  • 自定义组件实现v-model

    在项目中需要做一个标题展开框 xff0c 点击展开才会显示下面的内容 因为多个地方都需要这样的可展开标题 xff0c 所以做了一个自定义组件 组件需要一个双向绑定的值 xff0c 控制展开 缩放 于是就思考 xff0c 父向子可以用prop
  • linux下提示bash:command not found

    如果新装的系统 xff0c 运行一些很正常的诸如 xff1a shutdown xff0c fdisk的命令时 xff0c 悍然提示 xff1a bash command not found 那么 首先就要考虑root 的 PATH里是否已
  • k8s与pod概念

    此文章为学习过程中根据网上资源整合总结 文章目录 1 为什么需要k8s1 1 应用部署模式的演进1 11 模式对比1 12 各模块介绍 1 2 管理大量的容器 k8s 2 ks8的集群架构3 pod k8s调度的最小单元3 1 一个 pod
  • git在http协议切换账号/输错账号密码如何更改

    掩面哭泣 xff0c 为什么提交总会出问题 这次是因为我push到gerrit上的时候第一次用错成了自己的账号 xff0c 然后想更改成公司的 xff0c 不再跳出登录界面了 xff0c 改不了 因为只有公司账号上设置了agreement
  • 【vue】利用prettier插件规避烦人的eslint报错和代码不规范

    本文主要包括两点 xff1a 大家协同开发代码各异 xff0c eslint加上 64 vue prettier采取recommended 43 prettier组合可使得代码更规范使用vscode的prettier插件在修改保存时自动格式
  • 前端理解base64

    一 背景 xff1a ascii码 字符 61 gt 二进制 计算机中所有数据的存储都是以二进制模式 xff0c 比如想要存储abcd需将其转化为二进制 xff0c 具体用哪些二进制来表示哪个符号 xff0c 有一个统一的编码规则 xff0
  • antd使用相关笔记

    文章目录 modal设置样式无效checkboxform设置值 modal设置样式无效 因为挂在div外 xff0c 所以用less时包在该组件的根div下的css样式设置无效 xff0c 需设置 xff1a span class toke
  • vue实例的生命周期详解

    Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期 官网中的长图诠释了Vue实例从创建 xff0c 运行到销毁的整个过程 从vue实例的创建 xff0c 运行 xff0c 销毁期间 xff0c 总是伴随着各种各样的事