前端面试题(四):Vue2的生命周期

Vue 2 中的生命周期分为多个阶段,每个阶段都有相应的生命周期钩子(Hooks)来处理组件在不同阶段的逻辑。以下是 Vue 2 的各个生命周期钩子函数及其触发时机:

1. 创建阶段 (Creation)

  • beforeCreate:

    • 这个钩子在 Vue 实例被初始化之后、数据观测和事件/侦听器设置之前调用。
    • 不能访问 datacomputedmethods 等数据和事件。
  • created:

    • 在实例创建完成后立即调用。此时,数据已观测,事件已设置,但 DOM 还未挂载。
    • 可以访问 datacomputedmethods 等属性。

2. 挂载阶段 (Mounting)

  • beforeMount:

    • 在挂载开始之前调用,相关的 render 函数首次被调用。
    • 可以在这个阶段做一些初始化的操作,但还无法访问到实际的 DOM。
  • mounted:

    • 在 DOM 挂载完成后调用。此时,所有的模板、组件已经插入到 DOM 中。
    • 可以在这个钩子中访问和操作真实的 DOM 元素,进行一些依赖于 DOM 的操作。

3. 更新阶段 (Updating)

  • beforeUpdate:

    • 在数据更新时调用,数据变动后,虚拟 DOM 会重新渲染和打补丁前执行此钩子。
    • 可以在这个钩子中进行某些操作,但你不能改变数据(避免无限循环)。
  • updated:

    • 数据更新后,虚拟 DOM 被重新渲染并打补丁后调用。此时,视图已更新。
    • 可以在这个钩子中访问和操作更新后的 DOM,但此时不会再次触发渲染。

4. 销毁阶段 (Destruction)

  • beforeDestroy:

    • 在组件销毁之前调用。此时,实例仍然是有效的,可以进行清理工作,如取消定时器、注销事件监听等。
  • destroyed:

    • 组件销毁后调用。此时,Vue 实例已经完全销毁,数据、事件监听、子组件等都已经被清除,无法再进行任何操作。

5. 错误处理钩子 (Error Handling)

  • errorCaptured :
    • 捕获来自子组件的错误,并阻止错误进一步传播。这个钩子只会在错误发生在子组件时被触发。

总结

生命周期钩子 调用时机
beforeCreate 实例初始化之后,数据观测和事件/侦听器设置之前。
created 实例创建完成,数据已观测,事件已设置,但 DOM 尚未挂载。
beforeMount 挂载开始之前,render 函数首次被调用。
mounted DOM 挂载完成后,实例和 DOM 关联完毕,可以访问到真实 DOM。
beforeUpdate 数据变化前,虚拟 DOM 更新前。
updated 数据变化后,虚拟 DOM 更新完成,视图已更新。
beforeDestroy 组件销毁之前,清理工作。
destroyed 组件销毁之后,实例和数据已销毁。
errorCaptured 捕获并处理子组件的错误。

这些生命周期钩子函数为开发者提供了丰富的操作时机,可以根据需求进行相应的逻辑处理。

相关推荐
kyriewen10 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒10 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
山河木马11 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
小林攻城狮11 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦11 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer11 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队11 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY11 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_12 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏12 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端