Vue生命周期函数执行顺序(使用注意事项)

news2025/1/11 7:44:24

文章目录

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed

Vue.js 是一个基于 MVVM 模式的前端框架,它的核心是一个响应式的数据绑定系统。在 Vue.js 中,组件是一个可复用的 Vue 实例,它拥有自己的生命周期钩子函数,用于在组件生命周期的不同阶段执行一些特定的逻辑。下面通过例子介绍一下常见的 Vue 组件生命周期:
在这里插入图片描述

beforeCreate

beforeCreate():在实例被创建之初执行的函数。在这个钩子函数中,可以进行一些初始化的操作,例如初始化数据、注入组件等等。该函数执行时,Vue实例的数据观测和事件配置都还没有被设置,所以不能访问实例的this属性,也不能访问DOM元素。

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  beforeCreate() {
    console.log('beforeCreate')
    this.message = 'Hello, Vue!'
  },
  created() {
    console.log('created')
  },
  data() {
    return {
      message: ''
    }
  }
}
</script>

示例中,beforeCreate钩子函数中设置了message属性的值为’Hello, Vue!'。在created钩子函数中,可以看到这个属性已经被设置,所以可以将其渲染到模板中。

注意:beforeCreate钩子函数只会在实例被创建之初执行一次,之后不会再执行。如果需要在实例更新之前进行一些操作,可以使用beforeUpdate钩子函数。

created

created():在实例被创建之后立即执行。在这个钩子函数中,可以进行一些初始化的操作,例如获取数据、设置计算属性等等。在这个钩子函数被执行时,Vue实例已经完成了数据观测和事件配置,但还没有开始DOM编译和挂载,所以仍然不能访问DOM元素。

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  created() {
    console.log('created')
    this.getMessage()
  },
  data() {
    return {
      message: ''
    }
  },
  methods: {
    getMessage() {
      // 获取数据的方法
      this.message = 'Hello, Vue!'
    }
  }
}
</script>

示例中,created钩子函数中调用了getMessage方法来获取数据并设置了message属性的值。在模板中,可以看到这个属性已经被渲染出来了。

注意:created钩子函数只会在实例被创建之后执行一次,之后不会再执行。如果需要在实例更新之后进行一些操作,可以使用updated钩子函数。

beforeMount

beforeMount():在实例挂载之前执行。在这个钩子函数中,可以对模板进行一些编译和渲染前的操作。在这个钩子函数被执行时,Vue实例已经完成了数据观测和计算属性的计算,但还没有开始DOM编译和挂载。

<template>
  <div ref="myDiv">{{ message }}</div>
</template>

<script>
export default {
  beforeMount() {
    console.log('beforeMount')
    this.$refs.myDiv.style.color = 'red'
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  }
}
</script>

示例中,beforeMount钩子函数中设置了myDiv元素的颜色为红色。在模板中,可以看到这个颜色已经被应用到了渲染出来的元素中。

注意:beforeMount钩子函数只会在实例挂载之前执行一次,之后不会再执行。如果需要在实例销毁之前进行一些操作,可以使用beforeDestroy钩子函数。

mounted

mounted():在实例挂载之后立即执行。在这个钩子函数中,可以对模板进行一些操作,例如访问DOM元素、使用第三方插件等等。在这个钩子函数被执行时,Vue实例已经完成了DOM编译和挂载,所以可以访问DOM元素。

<template>
  <div ref="myDiv">{{ message }}</div>
</template>

<script>
export default {
  mounted() {
    console.log('mounted')
    this.$refs.myDiv.style.color = 'red'
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  }
}
</script>

示例中,mounted钩子函数中设置了myDiv元素的颜色为红色。在模板中,可以看到这个颜色已经被应用到了渲染出来的元素中。

注意:,mounted钩子函数只会在实例挂载之后执行一次,之后不会再执行。如果需要在实例更新之后进行一些操作,可以使用updated钩子函数。如果需要在实例销毁之前进行一些操作,可以使用beforeDestroy钩子函数。

beforeUpdate

beforeUpdate():在数据更新之前立即执行。在这个钩子函数中,可以进行一些数据更新前的操作,例如获取更新前的DOM信息等等。在这个钩子函数被执行时,Vue实例已经完成了数据的计算和渲染,但还没有开始DOM重新渲染。

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  beforeUpdate() {
    console.log('beforeUpdate')
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    updateMessage() {
      this.message = 'Hello, World!'
    }
  }
}
</script>

示例中,定义了一个updateMessage方法,用于更新message属性的值。在点击按钮之后,message属性的值将会被更新,并且beforeUpdate钩子函数会被执行。

注意:beforeUpdate钩子函数只会在数据更新之前执行一次,之后不会再执行。如果需要在数据更新之后进行一些操作,可以使用updated钩子函数。

updated

updated():在数据更新之后立即执行。在这个钩子函数中,可以对更新后的DOM进行操作,例如获取更新后的DOM信息等等。在这个钩子函数被执行时,Vue实例已经完成了数据的计算和渲染,也完成了DOM重新渲染。

<template>
  <div ref="myDiv">{{ message }}</div>
  <button @click="updateMessage">Update Message</button>
</template>

<script>
export default {
  updated() {
    console.log('updated')
    this.$refs.myDiv.style.color = 'red'
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    updateMessage() {
      this.message = 'Hello, World!'
    }
  }
}
</script>

示例中,定义了一个updateMessage方法,用于更新message属性的值。在点击按钮之后,message属性的值将会被更新,并且updated钩子函数会被执行。在updated钩子函数中,将myDiv元素的颜色设置为红色。

注意:updated钩子函数只会在数据更新之后执行一次,之前不会执行。如果需要在数据更新之前进行一些操作,可以使用beforeUpdate钩子函数。如果需要在实例销毁之前进行一些操作,可以使用beforeDestroy钩子函数。

beforeDestroy

beforeDestroy():在实例销毁之前立即执行。在这个钩子函数中,可以进行一些实例销毁前的操作,例如清除定时器、取消事件监听等等。

<template>
  <div>{{ message }}</div>
  <button @click="destroy">Destroy Instance</button>
</template>

<script>
export default {
  beforeDestroy() {
    console.log('beforeDestroy')
    // 清除定时器、取消事件监听等等
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    destroy() {
      this.$destroy()
    }
  }
}
</script>

示例中,定义了一个destroy方法,用于销毁Vue实例。在点击按钮之后,beforeDestroy钩子函数会被执行。

注意:beforeDestroy钩子函数只会在实例销毁之前执行一次,之后不会再执行。如果需要在实例销毁之后进行一些操作,可以使用destroyed钩子函数。

destroyed

destroyed():在实例销毁之后立即执行。在这个钩子函数中,可以进行一些实例销毁后的操作,例如清除定时器、取消事件监听等等。

<template>
  <div>{{ message }}</div>
  <button @click="destroy">Destroy Instance</button>
</template>

<script>
export default {
  destroyed() {
    console.log('destroyed')
    // 清除定时器、取消事件监听等等
  },
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    destroy() {
      this.$destroy()
    }
  }
}
</script>

示例中,定义了一个destroy方法,用于销毁Vue实例。在点击按钮之后,destroyed钩子函数会被执行。

注意:destroyed钩子函数只会在实例销毁之后执行一次,之前不会执行。如果需要在实例销毁之前进行一些操作,可以使用beforeDestroy钩子函数。

另外,Vue.js还提供了其他一些生命周期函数,如activated()和deactivated()用于处理组件的激活和非激活状态,errorCaptured()用于捕获组件内部错误等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二章 进程管理

2.1 进程的引入 2.1.1程序的顺序执行 1.程序的顺序执行 程序是人们要计算机完成特定功能的一些指令序列&#xff0c;是一个按严格次序、顺序执行的操作序列&#xff0c;是一个静态的概念。 如&#xff1a;有一个程序&#xff0c;要求先输入数据&#xff0c;再做相应的计算…

platform_get_resource=NULL内核源码分析

platform_get_resourceNULL内核源码分析 文章目录 platform_get_resourceNULL内核源码分析1.第一步&#xff0c;我们看一下什么情况下platform_get_resource函才会返回NULL,也就是没有获取到资源。2.第二步&#xff0c;因为myled这个设节点会转成了platform_device&#xff0c;…

suricata中DPDK收发包线程模型和配置说明

《基于DPDK收包的suricata的安装和运行》中已经讲过基于DPDK收发包的suricata的安装过程&#xff0c;今天我们来看一下&#xff0c;suricata中DPDK的收发包线程模型以及相关的配置。 1、收发包线程模型&#xff1a; 通过分析代码&#xff0c;suricata中DPDK收发包线程模型如下…

C高级 day03

1.编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

采药 DP 裸01背包 java

&#x1f351; 采药 import java.util.*;class Main{static int N 1010;static int[] f new int[N];public static void main(String[] aaa){Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();for(int i 0; i < n; i){int v sc.nextInt()…

s2021ss62找规律

代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,ans; int main() {cin>>n>>m;for(int i1;i<n-1;i)ansi;cout<<ansm;return 0; }

一文了解支付卡行业数据安全标准(PCI DSS 4.0)新要求

在接下来不到一年的时间里&#xff0c;将有越来越多的企业要遵守支付卡行业数据安全标准 (PCI DSS) 4.0 版的多项新要求。 关于 PCI DSS PCI DSS 包含 12 项保护支付卡数据的要求&#xff0c;在过去十年中都没有更新。但经过三年的商讨&#xff0c;现在已经进行了重大改革。 …

JavaScript基础语法篇超详解

目录 一. 什么是JavaScript? 概念 JavaScript可以做的事情 JavaScript和HTML, CSS之间的关系 JavaScript运行过程 二. 基础语法篇 第一个JavaScript程序 JS的书写形式 JS的代码注释 输入输出 变量的使用 变量命名 数据类型 变量的声明和使用 理解动态类型 JS变量类型 JS数组…

一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

一、分区的定义 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c; Hive 中的分区就是分目录 &#xff0c;把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区&#xff0c;这样的查询效率 会…

【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

通过Clion进行嵌入式开发 一、工具安装 1、安装Clion 因为众所周知的原因&#xff0c;Clion的安装就不解释了&#xff0c;有需要的同学自行检索 2、安装STM32CubeMX 正常去官网下载最新版的安装就行了&#xff1a;STM32CubeMX - STM32Cube initialization code generator …

2673. 使二叉树所有路径值相等的最小代价(dfs+bfs)

题目描述 评论 (23) 题解 (54) 提交记录 2673. 使二叉树所有路径值相等的最小代价 难度 中等 14 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子 2 …

image adaptive 3dlut based on deep learning

文章目录 image adaptive 3dlut based on deep learning1. Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time2. CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement2.1 3d…

平安大视野解读主动健康:以运动改变生命轨迹,以名医权益为健康保驾护航

“每个人都会老&#xff0c;这不可避免&#xff0c;但是能不能老的迟一点&#xff1f;让我们能够活到一百岁还能够运动&#xff0c;不需要别人照顾&#xff0c;这是最大的成功&#xff1b;而科学运动是最关键的方式。”5月6日&#xff0c;在平安私人银行联合平安健康举办的“平…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示&#xff0c;需要用原生html5cssjs来写&#xff0c;所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG&#xff0c;百度那是必不可少的&#xff0c;可是这些人写的牛头不对马嘴&#xff0c;简直是标题党一大堆&#xff0c;令我作呕&…

使用pytest和allure框架实现自动化测试报告优化

目录 -x出现一条测试用例失败就退出测试 生成测试报告json pytest&#xff1a; 需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 命名规则 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头…

DeepLab v1

SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS 基于深度卷积网络和全连通CRFS的语义图像分割 ABSTRACT 深度卷积神经网络&#xff08;DCNNs&#xff09;最近在高级视觉任务中表现出了最新的性能&#xff0c;如图像分类和物体检测。这…

Docker | docker安装MySQL

知识目录 一、前言二、安装Docker镜像2.1 什么是docker2.2 为什么安装docker2.3 安装docker 三、Docker安装MySQL3.1 常用docker命令3.2 docker安装MySQL 四、结语 一、前言 大家好&#xff01;这篇文章主要讲解 如何在Centos7中安装Docker以及Docker安装MySQL:5.7.42 。 ✨本…

深度学习模型复杂度评估(时间复杂度、空间复杂度)

目录 1、两个指标 2、复杂度对模型的影响 1、两个指标 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过&#xff1a; 计算量/FLOPS&#xff08;时间复杂度&#xff09;即…

VS Code 常用插件推荐

VS Code 常用插件推荐 1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文&#xff08;简体&#xff09;语言包 2. Auto Rename Tag 自动关闭标签&#xff0c;写 html 标签的时候可以重命名标签名。 现在 vscode 已经内置了&…

大项目内训 2023.5.11

目录 分别介绍一下消息处理相关的MQ、WebSocket、分布式事务 介绍一下异步消息传输 如何配置websocket ​编辑 oatpp是什么&#xff1f; cinatra是什么&#xff1f; 我们教育最大的缺失, 是缺乏阅读、写作和逻辑训练 佳作推荐 分别介绍一下消息处理相关的MQ、WebSocket、…