Vue的生命周期和钩子函数介绍
• 首先Vue的生命周期就如同一个有序的流程,就象代码从上往下运行一样,想象一下是不是就像一条挂起来的绳索一样从上往下,但是在绳索上面每间隔一段距离就有一个挂钩,可以从上往下在挂钩上面挂上物品,就是钩子函数,在每个阶段运行的代码就是钩子函数的大括号包裹的代码。
• 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。
生命周期的钩子函数
beforeCreate
在组件实例初始化完成之后立即调用。
• 类型
interface ComponentOptions {
beforeCreate?(this: ComponentPublicInstance): void
}
• 详细信息
会在实例初始化完成、props 解析之后、data() 和 computed 等选项处理之前立即调用。
注意,组合式 API 中的 setup() 钩子会在所有选项式 API 钩子之前调用,beforeCreate() 也不例外。
created
在组件实例处理完所有与状态相关的选项后调用。
• 类型
interface ComponentOptions {
created?(this: ComponentPublicInstance): void
}
• 详细信息
当这个钩子被调用时,以下内容已经设置完成:响应式数据、计算属性、方法和侦听器。然而,此时挂载阶段还未开始,因此 $el 属性仍不可用。
🔗beforeMount
在组件被挂载之前调用。
• 类型
interface ComponentOptions {
beforeMount?(this: ComponentPublicInstance): void
}
• 详细信息
当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。
这个钩子在服务端渲染时不会被调用。
mounted
在组件被挂载之后调用。
• 类型
interface ComponentOptions {
mounted?(this: ComponentPublicInstance): void
}
• 详细信息组件在以下情况下被视为已挂载:这个钩子通常用于执行需要访问组件所渲染的 DOM 树相关的副作用,或是在服务端渲染应用中用于确保 DOM 相关代码仅在客户端被调用。这个钩子在服务端渲染时不会被调用。
• 所有同步子组件都已经被挂载。(不包含异步组件或 <Suspense> 树内的组件)
• 其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。
beforeUpdate
在组件即将因为一个响应式状态变更而更新其 DOM 树之前调用。
• 类型
interface ComponentOptions {
beforeUpdate?(this: ComponentPublicInstance): void
}
• 详细信息
这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。
这个钩子在服务端渲染时不会被调用。
updated
在组件因为一个响应式状态变更而更新其 DOM 树之后调用。
• 类型
interface ComponentOptions {
updated?(this: ComponentPublicInstance): void
}
• 详细信息
父组件的更新钩子将在其子组件的更新钩子之后调用。
这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。如果你需要在某个特定的状态更改后访问更新后的 DOM,请使用nextTick()作为替代。
这个钩子在服务端渲染时不会被调用。
• 不要在 updated 钩子中更改组件的状态,这可能会导致无限的更新循环!
beforeUnmount
在一个组件实例被卸载之前调用。
• 类型
interface ComponentOptions {
beforeUnmount?(this: ComponentPublicInstance): void
}
• 详细信息
当这个钩子被调用时,组件实例依然还保有全部的功能。
这个钩子在服务端渲染时不会被调用。
unmounted
在一个组件实例被卸载之后调用。
• 类型
interface ComponentOptions {
unmounted?(this: ComponentPublicInstance): void
}
• 详细信息一个组件在以下情况下被视为已卸载:可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。这个钩子在服务端渲染时不会被调用。
• 其所有子组件都已经被卸载。
• 所有相关的响应式作用 (渲染作用以及 setup() 时创建的计算属性和侦听器) 都已经停止。
errorCaptured
在捕获了后代组件传递的错误时调用。
• 类型
interface ComponentOptions {
errorCaptured?(
this: ComponentPublicInstance,
err: unknown,
instance: ComponentPublicInstance | null,
info: string
): boolean | void
}
• 详细信息错误可以从以下几个来源中捕获:这个钩子带有三个实参:错误对象、触发该错误的组件实例,以及一个说明错误来源类型的信息字符串。
• 组件渲染
• 事件处理器
• 生命周期钩子
• setup() 函数
• 侦听器
• 自定义指令钩子
• 过渡钩子
activated
若组件实例是<KeepAlive>缓存树的一部分,当组件被插入到 DOM 中时调用。
这个钩子在服务端渲染时不会被调用。
• 类型
interface ComponentOptions {
activated?(this: ComponentPublicInstance): void
}
deactivated
若组件实例是<KeepAlive>缓存树的一部分,当组件从 DOM 中被移除时调用。
这个钩子在服务端渲染时不会被调用。
• 类型
interface ComponentOptions {
deactivated?(this: ComponentPublicInstance): void
}
前端开发面试题—Vue的生命周期
文章来源:网络 版权归原作者所有,如涉及知识产权问题,请权利人联系我们,我们将立即处理.
标签:
专栏:  
VUE
推荐阅读 更多精彩内容
-
通过一行代码实现全站变灰教程在任意css文件、style标签内加上以下属性,即可实现1. html {2. filter: grayscale(1);3. }主题添加教程外观设置 - 全局设置
此情可待追忆 阅读 597
-
Python几十行代码轻松实现微信自动回复机器人最近因为太无聊了就考虑能不能做一些好玩的东西出来,正好在CSDN的推荐上看到大佬做的微信自动回复机器人,觉得很有趣,因此想着自己也能动手做一个。在此就写
-
终端窗口执行以下步骤生成交易所需 RSA 秘钥(Windows 环境需提前下载安装OpenSSL 库)第一步:生成私钥openssl genrsa -out rsa_private_key.pem 1
一生所爱の赫萝 阅读 499
-
博主是一名学生,疫情期间需要居家学习远程办公,没办法直接使用实验室电脑,一般实验室的电脑都没有公网ip,没办法直接访问,所以可以通过frp这个工具进行内网穿透,实现通过访问外网服务器(我使用的是阿里云
空空姬 阅读 641
-
首先怀疑是DNS问题,用的是运营商的做为首选DNS,修改为114.114.114.114 没有效果。经过输出请求链接返回时间,发现部分 https 资源访问极慢,切换到 http 地址,访问变快初步怀
-
chromedriver安装失败如果遇到以下错误提示npm ERR! Failed at the chromedriver@92.0.1 install script.npm ERR! This is
光阴的故事 阅读 650
-
如果遇到以下错误提示:grunt-cli: The grunt command line interface (v1.4.3) Fatal error: Unable to find local gr
尔是硪措手不及的不知所措 阅读 1300
-
我下载的是1.5.0版本的,就用这个进行演示吧。找到ueditor的github地址,下载压缩包并解压。得到源码,但是我们的目的是得到编译文件后放到项目态目录里面,所以需要进行编译获取ueditor.
光阴的故事 阅读 678
-
UEditor 介绍UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。1 入门部署和体
偷得浮生半日闲 阅读 562
-
HTML部分: 更改头像JS: var domain = '{{$main_domain}}' window.onload = () => { let upDOM =
光阴的故事 阅读 804