前端有道 前端有道
导航
算法
开发
  • Git

    • Git导读
  • 收藏夹 (opens new window)
  • 工具库 (opens new window)
  • netlify Vuepress (opens new window)
  • vercel Vuepress (opens new window)
  • Vuepress2.0 (opens new window)
  • netlify Vuepress2.0 (opens new window)
留言区
娱乐
关于
  • 时间轴
  • 标签
  • 分类

星野

给岁月以文明
导航
算法
开发
  • Git

    • Git导读
  • 收藏夹 (opens new window)
  • 工具库 (opens new window)
  • netlify Vuepress (opens new window)
  • vercel Vuepress (opens new window)
  • Vuepress2.0 (opens new window)
  • netlify Vuepress2.0 (opens new window)
留言区
娱乐
关于
  • 时间轴
  • 标签
  • 分类
  • 基础知识

  • 工程化

  • 组件库

  • CSS

  • ES6-ES12

  • JavaScript

  • Vue2

    • 令人眼前一亮的Vue实战技巧
    • 助你开发更高效的10个Vue指令
    • 理解Vue响应式数据变化
    • Vue父子组件的生命周期
      • 前言
        • Vue生命周期做了什么以及能做什么
  • Vue3

  • webpack

  • 浏览器

  • 开发
  • Vue2
星野
2022-02-16
0
目录

Vue父子组件的生命周期

# Vue父子组件的生命周期

# 前言

在单个组件中,钩子的执行顺序是beforeCreate-> created -> mounted->... ->destroyed, 但在多个组件嵌套时,父组件和子组件各拥有各自独立的钩子函数,他们的执行顺序有是怎么样?

了解Vue生命周期钩子,就能更好理解这个问题。

# Vue生命周期做了什么以及能做什么

  • beforeCreate执行时:data和el均未初始化,值为undefined。
  • created执行时:Vue 实例观察的数据对象data初始化,此时可以得到data的值,但Vue 实例使用的根 DOM 元素el还未初始化。
  • beforeMount 执行时:data和el均已经初始化,但此时el并没有渲染进数据,el的值为“虚拟”的元素节点。
  • mounted 执行时:此时el已经渲染完成并挂载到实例上
  • beforeUpdate和updated触发时,el中的数据都已经渲染完成,但只有updated钩子被调用时候,组件dom才被更新。
  • 在created钩子中可以对data数据进行操作,这个时候可以进行数据请求将返回的数据赋给data
  • 在mounted钩子对挂载的dom进行操作,此时,DOM已经被渲染到页面上。
  • 虽然updated函数会在数据变化时被触发,但却不能准确的判断是那个属性值被改变,所以在实际情况中用computed或watch函数来监听属性的变化,并做一些其他的操作。
  • 所有的生命周期钩子自动绑定 this 上下文到实例中,所以不能使用箭头函数来定义一个生命周期方法 (例如 created: () => this.- fetchTodos()),会导致this指向父级。
  • 父子组件的钩子并不会等待请求返回,请求是异步的,VUE设计也不能因为请求没有响应而不执行后面的钩子。所以,我们必须通过v-if来控制子组件钩子的执行时机。
  • 在使用vue-router时有时需要使用来缓存组件状态,这个时候created钩子就不会被重复调用了,如果我们的子组件需要在每次加载或切换状态的时候进行某些操作,可以使用activated钩子触发。

activated, deactivated 是组件keep-alive时独有的钩子

所以父组件会先执行到beforeMount,接着会执行子组件钩子到挂载结束,再挂载父组件。

Vue父子组件渲染过程

父beforeCreate -> 父created-> 父beforeMount -> 
子beforeCreate -> 子created -> 子beforeMount -> 子mounted->
父mounted

子组件更新过程

父beforeUpdate -> 子beforeUpdate -> 子updated -> 父updated

父组件更新过程

父beforeUpdate -> 父updated

销毁过程

父beforeDestroy -> 子beforeDestroy -> 子destroyed -> 父destroyed
上次更新: 2022/05/09, 06:48:29
理解Vue响应式数据变化
Vue3开发知乎日报

← 理解Vue响应式数据变化 Vue3开发知乎日报→

最近更新
01
图解Git
05-10
02
关于 - 网站错误反馈
05-10
03
关于 - 赞赏❤️的用途
05-10
更多文章>
加入前端有道交流群 | Copyright © 2018-2025 星野 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式