欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > vue生命周期

vue生命周期

2025/9/25 12:59:28 来源:https://blog.csdn.net/qq_48763502/article/details/141817075  浏览:    关键词:vue生命周期

一 vue3生命周期

Vue 生命周期是指 Vue 组件从创建到销毁的整个过程。在这个过程中,组件经历了一系列的阶段,每个阶段都有其特定的生命周期钩子函数,这些钩子函数允许你在不同的阶段插入自定义逻辑。理解 Vue 生命周期有助于你更好地管理组件的状态和行为。

  • Vue2的生命周期

    创建阶段:beforeCreatecreated

    挂载阶段:beforeMountmounted

    更新阶段:beforeUpdateupdated

    销毁阶段:beforeDestroydestroyed

  • Vue3的生命周期

    创建阶段:setup

    挂载阶段:onBeforeMountonMounted

    更新阶段:onBeforeUpdateonUpdated

    卸载阶段:onBeforeUnmountonUnmounted

1 创建阶段

1.1 setup:

  • 组件创建时调用,作为组件的入口点。

  • 在此函数中,可以定义响应式数据、计算属性和方法。

  • 在 setup 中,无法访问 this,所有属性和方法都需直接返回。

2 挂载阶段

2.1 onBeforeMount()

  • 在组件挂载之前被调用。
  • 适合进行最后的准备工作,比如初始化外部库。
  • 作用:在组件挂载之前调用。此时,组件还未被插入到 DOM 中。
  • 使用场景:适用于初始化一些操作,但这些操作不依赖于 DOM 的渲染,比如准备数据等。
 onBeforeMount(()=>{console.log('挂载之前')})

2.2 onMounted()

  • 组件挂载完成后调用。
  • 适合执行需要 DOM 的操作,例如获取 DOM 元素或绑定事件。
  • 作用:在组件挂载完成后调用。此时,组件已被插入到 DOM 中,可以进行对 DOM 的操作或进行网络请求。
  • 使用场景:适合执行需要依赖于 DOM 已经渲染完成的操作,如操作 DOM、获取数据等。
  onMounted(() => {console.log('Component has been mounted');});

3 更新阶段

3.1 onBeforeUpdate()

  • 在数据更新之前调用。
  • 可以在此阶段访问到更新前的状态,适合进行一些状态检查或准备工作。

作用:在组件数据更新之前调用。此时,组件尚未重新渲染。

  • 使用场景:用于在数据更新前执行某些操作,例如记录数据变化的前后状态,或准备更新前的逻辑。
  onBeforeUpdate(()=>{console.log('更新之前')})

3.2 onUpdated()

  • 数据更新完成后调用。
  • 适合执行在更新后需要进行的操作,例如重新计算某些值或更新外部依赖。

作用:在组件数据更新之后调用。此时,组件已经重新渲染完成。

  • 使用场景:适合在组件更新完成后进行操作,如处理与更新后的 DOM 状态相关的逻辑,或者进行依赖于更新后的数据的操作。
 onUpdated(() => {console.log('Component has been updated');});

4 卸载阶段

4.1 onBeforeUnmount()

  • 在组件卸载之前调用。
  • 适合进行清理工作,例如取消事件监听或释放资源。

作用:在组件卸载之前调用。此时,组件仍然存在于 DOM 中。
使用场景:用于执行清理工作,比如移除事件监听器、清除定时器等。

 onBeforeUnmount(()=>{console.log('卸载之前')})

4.2 onUnmounted()

  • 组件卸载完成后调用。
  • 适合执行一些收尾工作,如记录日志或清理外部库的实例。
  • 作用:在组件卸载完成后调用。此时,组件已经从 DOM 中被移除。
  • 使用场景:适合做一些卸载后的清理工作,例如取消网络请求、清除数据等。
 onUnmounted(() => {console.log('Component has been unmounted');});

这些生命周期钩子函数使你能够在 Vue 组件的不同阶段执行代码,从而实现更复杂和更有控制的组件行为。这种机制帮助开发者管理组件的状态和副作用,使得组件更加健壮和可维护。

二 vue2 生命周期

1 beforeCreate:

组件实例刚被创建,数据和事件尚未设置。你不能访问 data 和 computed 属性。

2 created:

实例已创建,数据观测已完成,此时可以访问 data、computed 和 methods。通常在这里进行数据初始化或 API 调用。

3 beforeMount:

组件即将挂载到 DOM 上,render 函数尚未被调用。这是最后一次更改数据的机会。

4 mounted:

组件挂载完成后,所有的 DOM 元素均可用。适合进行 DOM 操作、启动定时器或请求数据。

5 beforeUpdate:

组件的数据发生变化,但虚拟 DOM 尚未更新。这时你可以对即将发生的更新做准备。

6 updated:

数据更新导致虚拟 DOM 重新渲染和更新后被调用。此时,DOM 已经更新,你可以进行依赖于最新 DOM 的操作。

7 beforeDestroy:

实例销毁之前调用,此时可以进行清理工作,如取消订阅、清除定时器等。

8 destroyed:

实例销毁后调用,所有的事件监听器和子实例均已被移除,适合进行最后的清理。

9 父组件和子组件的生命周期钩子函数执行顺序

在 Vue 中,父组件和子组件的生命周期钩子函数执行顺序大致如下:

  1. 父组件的 beforeCreate

    此时父组件尚未初始化,数据和事件都不可用。

  2. 父组件的 created

    父组件实例已创建,数据和事件已初始化,但 DOM 尚不可用。

  3. 父组件的 beforeMount

    此时,父组件即将挂载,模板已经编译,但还没有添加到 DOM。

  4. 子组件的 beforeCreate

    子组件实例开始创建,数据和事件未初始化。

  5. 子组件的 created

    子组件已创建,数据和事件初始化完成,但 DOM 尚不可用。

  6. 子组件的 beforeMount

    子组件即将挂载,模板已准备好,但还未渲染到 DOM。

  7. 子组件的 mounted

    子组件已挂载,能够访问到 DOM。

  8. 父组件的 beforeMount

    在子组件挂载之后,父组件即将完成挂载。

  9. 父组件的 mounted

    父组件已完全挂载,此时可以访问所有子组件的 DOM。

对于更新和卸载的阶段:

  1. 父组件的 beforeUpdate

    当父组件的响应式数据变化后,此钩子在 DOM 更新之前被调用。适合在这里做一些状态准备或逻辑处理。

  2. 子组件的 beforeUpdate

    紧接着,子组件的 beforeUpdate 被调用。此时可以进行准备工作,例如清理状态或计算。

  3. 子组件的 updated

    子组件的 DOM 更新完成后,调用 updated 钩子。在这里可以执行需要依赖于最新 DOM 的逻辑。

  4. 父组件的 updated

    最后,父组件的 updated 钩子被调用,表明父组件的更新已经完成。

卸载时:

  1. 父组件的 beforeUnmount

当父组件被销毁时,首先调用其 beforeUnmount 钩子。在这里可以进行清理工作,例如取消定时器、解绑事件等。

  1. 子组件的 beforeUnmount

接着,子组件的 beforeUnmount 被调用。这里也可以进行必要的清理,确保不会造成内存泄漏。

  1. 子组件的 unmounted

子组件完成销毁后,调用 unmounted 钩子。此时,子组件已完全卸载,所有状态和事件监听器已被移除。

  1. 父组件的 unmounted

最后,父组件的 unmounted 钩子被调用,表示父组件的销毁已完成。

这个顺序确保了子组件总是先于父组件进行创建、挂载和卸载,同时在更新阶段,子组件会先于父组件进行更新

三 Vue 2 和 Vue 3 生命周期的详细区别和特点:

1. 生命周期钩子名称和使用方式

Vue 2 生命周期钩子

  • created: 实例被创建后调用,适合进行数据初始化。
  • mounted: DOM 挂载完成后调用,适合进行 DOM 操作。
  • updated: 组件更新后调用,适合响应数据变化。
  • destroyed: 组件销毁前调用,适合清理事件监听器和定时器。

Vue 3 生命周期钩子

  • setup(): 在组件实例创建之前调用,是组合式 API 的入口。

  • onBeforeMount: 在组件挂载之前调用,适合做准备工作。

  • onMounted: 组件挂载后调用,适合进行 DOM 操作。

  • onBeforeUpdate: 组件更新之前调用,适合保存状态。

  • onUpdated: 组件更新后调用。

  • onBeforeUnmount: 组件卸载之前调用,适合清理工作。

  • onUnmounted: 组件卸载后调用。

2 this 上下文

Vue 2: 在生命周期钩子中,this 指向组件实例,可以直接访问 data、props 和 methods。

Vue 3: 在 setup() 中,this 是 undefined,必须通过函数参数访问 props 和 context。这使得组合式 API 更加函数化,减少了对 this 的依赖。

3. 响应式数据管理

Vue 2: 使用 data 选项声明响应式状态,必须通过 this 访问。

Vue 3: 使用 reactive() 和 ref() API 创建响应式状态,增强了灵活性。例如,可以在 setup() 中直接创建和使用响应式数据。

4. 性能优化

Vue 3: 由于使用了更高效的虚拟 DOM 和代理机制,生命周期钩子的调用效率更高,组件更新性能得到了显著提升。

5. 组合式 API

Vue 2: 使用选项式 API,组件逻辑通过不同的选项分开定义。

Vue 3: 支持组合式 API,可以将相关逻辑组合到一起,提升了代码的可重用性和可读性。例如,可以将不同的生命周期逻辑放在同一个 setup() 函数中,使得组件更加模块化。

6 总结

  • 灵活性: Vue 3 的组合式 API 使得生命周期管理更灵活。
  • 清晰性: 更清晰的钩子名称,便于理解每个阶段的执行时机。
  • 性能: 通过优化,提高了性能和响应速度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词