vue2【详解】生命周期(含父子组件的生命周期顺序)

简介: vue2【详解】生命周期(含父子组件的生命周期顺序)

1——beforeCreate:在内存中创建出vue实例,数据观测 (data observer) 和 event/watcher 事件配置还没调用(data 和 methods 属性还没初始化)

【执行数据观测 (data observer) 和 event/watcher 事件配置】


2——created:实例已完成数据观测 (data observer),property 和方法的运算,watch/event 事件回调。(data 和 methods属性完成初始化,还没开始编译模板,可以进行Ajax请求)


【在内存中编译模板】


3——beforeMount(服务器端渲染期间不被调用):模板编译完成,还没有挂载到页面中,相关的 render 函数首次被调用


【挂载模板到页面】


4——mounted(服务器端渲染期间不被调用):模板已挂载到页面中,真实的DOM渲染完成。—— 可以操作DOM了!


这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。


mounted 不保证所有的子组件也都一起被挂载,所以如果希望等到整个视图都渲染完毕,需在 mounted 内部使用 vm.$nextTick


至此,实例结束创建期,进入运行期,等待数据发生变化。


【数据变化】—— 数据变化时,会触发beforeUpdate和updated,但一般用watch


5——beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点


【更新页面】

6——updated:实例更新完毕后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了。

可用于子组件向父组件传递数据的变化

updated(){
    this.$emit('contentChange',this.content)
},

7——beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。—— 常在这里清除定时器和事件绑定

【销毁实例】

8——destroyed:Vue 实例销毁后调用。此时,Vue实例绑定的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁

父子组件的生命周期顺序

  • 父组件 created
  • 子组件 created (外到内)
  • 子组件 mounted
  • 父组件 mounted (内到外)
  • 子组件 updated
  • 父组件 updated (内到外)
  • 子组件 destroyed
  • 父组件 destroyed (内到外)

范例代码

src\views\index.vue

<template>
  <div>
    <Child :num="num" />
    <button @click="add_num">+1</button>
  </div>
</template>

<script>
import Child from "./child.vue";

export default {
  components: {
    Child,
  },
  data() {
    return {
      num: 0,
    };
  },
  methods: {
    add_num() {
      this.num += 1;
    },
  },
  created() {
    console.log("父组件 created");
  },
  mounted() {
    console.log("父组件 mounted");
  },
  updated() {
    console.log("父组件 updated");
  },
  destroyed() {
    console.log("父组件 destroyed");
  },
};
</script>


src\views\menu\child.vue

<template>
  <div>
    {{ num }}
  </div>
</template>

<script>
export default {
  props: {
    num: Number,
  },

  created() {
    console.log("子组件 created");
  },
  mounted() {
    console.log("子组件 mounted");
  },
  updated() {
    console.log("子组件 updated");
  },
  destroyed() {
    console.log("子组件 destroyed");
  },
};
</script>
目录
相关文章
|
JavaScript 前端开发 编译器
看完这篇文章,不再害怕Vue3的源码(一)
看完这篇文章,不再害怕Vue3的源码
uniapp-picker选择省市区效果demo(整理)
uniapp-picker选择省市区效果demo(整理)
|
JavaScript
Vue 的父组件和子组件生命周期钩子执行顺序
在 Vue 中,父组件和子组件的生命周期钩子执行顺序如下:
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
863 3
|
资源调度 JavaScript API
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
11668 120
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
机器学习/深度学习 前端开发 JavaScript
WebAssembly:让前端性能突破极限的秘密武器
WebAssembly(简称 WASM)作为前端开发的性能加速器,能够让代码像 C++ 一样在浏览器中高速运行,突破了 JavaScript 的性能瓶颈。本文详细介绍了 WebAssembly 的概念、工作原理以及其在前端性能提升中的关键作用。通过与 JavaScript 的配合,WASM 让复杂运算如图像处理、3D 渲染、机器学习等在浏览器中流畅运行。文章还探讨了如何逐步集成 WASM,展示其在网页游戏、高计算任务中的实际应用。WebAssembly 为前端开发者提供了新的可能性,是提升网页性能、优化用户体验的关键工具。
6830 2
WebAssembly:让前端性能突破极限的秘密武器
|
JavaScript 前端开发 算法
真实DOM和虚拟DOM有哪些区别?
本文介绍了真实DOM和虚拟DOM的概念、使用方式、优势、劣势、使用场景、影响因素、开发效率和性能对比。真实DOM是浏览器提供的原生接口,直接操作简单直观,但频繁操作会导致性能损耗。虚拟DOM是真实DOM的抽象表示,通过比较差异减少DOM操作,适用于大规模数据变更和复杂交互的页面。开发者应根据具体需求选择合适的DOM操作方式,以提高页面性能和开发效率。
790 1
真实DOM和虚拟DOM有哪些区别?
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)