【Vue全家桶】细说组件中的生命周期

【Vue全家桶】细说组件中的生命周期

一、认识生命周期

1.1 认识生命周期

什么是生命周期呢

  • 每个组件都可能会经历从创建、挂载、更新、卸载等一系列的过程;
  • 在这个过程中的某一个阶段,我们可能会想要添加一些属于自己的代码逻辑(比如组件创建完后就请求一些服务器数据);
  • 但是我们如何可以知道目前组件正在哪一个过程呢?Vue给我们提供了组件的生命周期函数;
  • 生命周期函数:
  • 生命周期函数是一些钩子函数(回调函数),在某个时间会被Vue源码内部进行回调;
  • 通过对生命周期函数的回调,我们可以知道目前组件正在经历什么阶段;
  • 那么我们就可以在该生命周期中编写属于自己的逻辑代码了

生命周期的流程

在这里插入图片描述

二、生命周期钩子(Composition API)

2.1 onMounted()

注册一个回调函数,在组件挂载完成后执行。

详细信息

  • 组件在以下情况下被视为已挂载:

    • 其所有同步子组件都已经被挂载 (不包含异步组件或 <Suspense> 树内的组件)。

    • 其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。

  • 这个钩子通常用于执行需要访问组件所渲染的 DOM 树相关的副作用,或是在服务端渲染应用中用于确保 DOM 相关代码仅在客户端执行。

  • 这个钩子在服务器端渲染期间不会被调用。

2.2 onUnmounted()

注册一个回调函数,在组件实例被卸载之后调用。

详细信息

  • 一个组件在以下情况下被视为已卸载:

    • 其所有子组件都已经被卸载。

    • 所有相关的响应式作用 (渲染作用以及 setup() 时创建的计算属性和侦听器) 都已经停止。

  • 可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。

  • 这个钩子在服务器端渲染期间不会被调用。


2.3 onUpdated()

注册一个回调函数,在组件因为响应式状态变更而更新其 DOM 树之后调用。

详细信息

  • 父组件的更新钩子将在其子组件的更新钩子之后调用。

  • 这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。

  • 这个钩子在服务器端渲染期间不会被调用。

  • 不要在 updated 钩子中更改组件的状态,这可能会导致无限的更新循环

2.4 onBeforeUpdate()

注册一个钩子,在组件即将因为响应式状态变更而更新其 DOM 树之前调用。

详细信息

  • 这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。
  • 这个钩子在服务器端渲染期间不会被调用。

2.5 onBeforeMount()

注册一个钩子,在组件被挂载之前被调用。

详细信息

  • 当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。

  • 这个钩子在服务器端渲染期间不会被调用。

2.6 onBeforeUnmount()

注册一个钩子,在组件实例被卸载之前调用。

详细信息

  • 当这个钩子被调用时,组件实例依然还保有全部的功能。
  • 这个钩子在服务器端渲染期间不会被调用。

三、生命周期选项(Option API)

3.1 beforeCreate

在组件实例初始化完成之后立即调用。

详细信息

  • 会在实例初始化完成、props 解析之后、data()computed 等选项处理之前立即调用。
  • 注意,组合式 API 中的 setup() 钩子会在所有选项式 API 钩子之前调用,beforeCreate() 也不例外。

3.2 created

在组件实例处理完所有与状态相关的选项后调用。

详细信息

  • 当这个钩子被调用时,以下内容已经设置完成:响应式数据、计算属性、方法和侦听器。然而,此时挂载阶段还未开始,因此 $el 属性仍不可用。

3.3 beforeMount

在组件被挂载之前调用。

详细信息

  • 当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。
  • 这个钩子在服务端渲染时不会被调用

3.4 mounted

在组件被挂载之后调用。

详细信息

  • 组件在以下情况下被视为已挂载:
    • 所有同步子组件都已经被挂载。(不包含异步组件或 <Suspense> 树内的组件)
    • 其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。
  • 这个钩子通常用于执行需要访问组件所渲染的 DOM 树相关的副作用,或是在服务端渲染应用中用于确保 DOM 相关代码仅在客户端被调用。
  • 这个钩子在服务端渲染时不会被调用。

3.5 beforeUpdate

在组件即将因为一个响应式状态变更而更新其 DOM 树之前调用。

详细信息

  • 这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。
  • 这个钩子在服务端渲染时不会被调用。

3.6 updated

在组件因为一个响应式状态变更而更新其 DOM 树之后调用。

详细信息

  • 父组件的更新钩子将在其子组件的更新钩子之后调用。
  • 这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。
  • 这个钩子在服务端渲染时不会被调用。

3.7 beforeUnmount

在一个组件实例被卸载之前调用。

详细信息

  • 当这个钩子被调用时,组件实例依然还保有全部的功能。
  • 这个钩子在服务端渲染时不会被调用。

3.8 unmounted

在一个组件实例被卸载之后调用。

详细信息

  • 一个组件在以下情况下被视为已卸载:
    • 其所有子组件都已经被卸载。
    • 所有相关的响应式作用 (渲染作用以及 setup() 时创建的计算属性和侦听器) 都已经停止。
  • 可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。
  • 这个钩子在服务端渲染时不会被调用。

四、额外补充

4.1 created和mounted的区别

  • created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
  • mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

4.2 一般在哪个生命周期请求异步数据

我们可以在钩子函数 createdbeforeMountmounted 中进行调用,因为在这三个钩子函数中,data 已经创建,可以将服务端端返回的数据进行赋值。

推荐在 created 钩子函数中调用异步请求,因为在 created 钩子函数中调用异步请求有以下优点:

  • 能更快获取到服务端数据,减少页面加载时间,用户体验更好;
  • SSR不支持 beforeMountmounted 钩子函数,放在 created 中有助于一致性。

猜你喜欢

转载自blog.csdn.net/qq_53664443/article/details/129790288
今日推荐