您的位置:首页 > 教育 > 培训 > 微信小程序永久禁止_安卓app开发软件有哪些_市场营销网站_怎么做推广比较成功

微信小程序永久禁止_安卓app开发软件有哪些_市场营销网站_怎么做推广比较成功

2025/8/1 3:41:34 来源:https://blog.csdn.net/2301_80158456/article/details/146560782  浏览:    关键词:微信小程序永久禁止_安卓app开发软件有哪些_市场营销网站_怎么做推广比较成功
微信小程序永久禁止_安卓app开发软件有哪些_市场营销网站_怎么做推广比较成功

生命周期钩子

什么是生命周期?

生命周期: 指的是一个 Vue 组件从 创建挂载更新销毁 的完整过程。
类比人的一生:

  • 出生(组件创建) → 上学(挂载到页面) → 工作变化(数据更新) → 退休(组件销毁)。

每个阶段都有特定的任务需要处理(如初始化数据、操作 DOM、清理资源等),这就是生命周期的意义。


什么是钩子函数?

钩子函数(Lifecycle Hooks) 是 Vue 在生命周期不同阶段自动调用的函数。
开发者可以在这些函数中编写代码,干预组件的各个阶段,就像在关键时间点插入“钩子”执行逻辑。

例如:
  • 组件初始化完成时created),可以发起网络请求。
  • 组件挂载到页面后mounted),可以操作 DOM。
  • 组件销毁前beforeUnmount),可以清理定时器。

Vue 3 生命周期流程图

以下是 Vue 3 的生命周期流程图,展示了钩子函数的执行顺序:

初始化阶段↓
setup()        → Composition API 入口(替代 Vue 2 的 beforeCreate 和 created)↓
beforeMount    → 组件挂载到 DOM 前↓
mounted        → 组件已挂载到 DOM↓
更新阶段(数据变化时触发)↓
beforeUpdate   → 数据更新,DOM 重新渲染前↓
updated        → DOM 更新完成↓
卸载阶段↓
beforeUnmount  → 组件销毁前↓
unmounted      → 组件已销毁

Vue 3 钩子函数详解(Composition API 写法)

在 Vue 3 的 Composition API 中,钩子函数以 onX 形式导入使用:

钩子函数作用使用场景
onBeforeMount组件挂载到 DOM 触发极少使用
onMounted组件挂载到 DOM 触发操作 DOM、初始化第三方库(如图表)
onBeforeUpdate数据变化导致 DOM 更新 触发获取更新前的 DOM 状态
onUpdatedDOM 更新 触发依赖 DOM 的后续操作(谨慎使用,避免循环)
onBeforeUnmount组件销毁 触发清理定时器、取消事件监听
onUnmounted组件销毁 触发释放内存资源
示例代码:
import { onMounted, onUnmounted } from 'vue';export default {setup() {// 组件挂载后执行onMounted(() => {console.log('组件已挂载');// 例如:初始化图表});// 组件销毁前执行onUnmounted(() => {console.log('组件即将销毁');// 例如:清除定时器});}
};

为什么需要生命周期钩子?

  1. 控制代码执行时机
    确保在正确的时间做正确的事(如 DOM 未渲染时无法操作元素)。
  2. 资源管理
    避免内存泄漏(如及时清理定时器、事件监听)。
  3. 逻辑解耦
    将不同阶段的代码分离,提高可维护性。

Vue2与Vue3生命周期对比

以下是 Vue 2 和 Vue 3 生命周期函数的对比详解,包含核心差异、用法和迁移指南:

阶段Vue 2 生命周期钩子Vue 3 生命周期钩子Vue 3 Composition API 钩子
初始化阶段beforeCreate❌ 无(被 setup 替代)无(setup 替代)
created❌ 无(被 setup 替代)无(setup 替代)
挂载阶段beforeMountbeforeMountonBeforeMount
mountedmountedonMounted
更新阶段beforeUpdatebeforeUpdateonBeforeUpdate
updatedupdatedonUpdated
卸载阶段beforeDestroybeforeUnmount(重命名)onBeforeUnmount
destroyedunmounted(重命名)onUnmounted
缓存组件activatedactivatedonActivated
deactivateddeactivatedonDeactivated
开发调试❌ 无❌ 无onRenderTracked(新增)
❌ 无❌ 无onRenderTriggered(新增)

核心差异详解

1. beforeCreatecreated 的替代
  • Vue 2:在实例初始化前后触发,常用于初始化数据或异步请求。

  • Vue 3:被 setup() 函数替代,所有初始化逻辑应在 setup 中完成。

    // Vue 3 的 setup 替代 created
    setup() {const data = fetchData(); // 直接执行初始化逻辑return { data };
    }
    
2. 卸载阶段钩子重命名
  • Vue 2beforeDestroydestroyed

  • Vue 3:更语义化的命名:

    // Options API
    beforeUnmount() { /* ... */ },
    unmounted() { /* ... */ }// Composition API
    import { onBeforeUnmount, onUnmounted } from 'vue';
    setup() {onBeforeUnmount(() => { /* 清理定时器等 */ });onUnmounted(() => { /* 移除事件监听 */ });
    }
    
3. 新增调试钩子
  • onRenderTracked:追踪虚拟 DOM 渲染依赖(开发模式)。

  • onRenderTriggered:追踪虚拟 DOM 重新渲染触发原因(开发模式)。

    import { onRenderTracked, onRenderTriggered } from 'vue';
    setup() {onRenderTracked((e) => {console.log('依赖追踪:', e);});onRenderTriggered((e) => {console.log('重新渲染触发:', e);});
    }
    

Vue 3 生命周期使用示例

1. Options API 写法(兼容 Vue 2 风格)
export default {beforeMount() {console.log('DOM 挂载前');},mounted() {console.log('DOM 挂载完成');},beforeUnmount() {console.log('组件卸载前');},unmounted() {console.log('组件已卸载');}
};
2. Composition API 写法(推荐)
import { onMounted, onUnmounted } from 'vue';export default {setup() {onMounted(() => {console.log('DOM 挂载完成');// 初始化操作(如请求数据、添加事件监听)});onUnmounted(() => {console.log('组件已卸载');// 清理操作(如移除事件监听、取消定时器)});return {};}
};

迁移指南(Vue 2 → Vue 3)

1. 直接重命名的情况
Vue 2 钩子Vue 3 钩子
beforeDestroybeforeUnmount
destroyedunmounted
2. 需要替换的情况
  • beforeCreatecreated:将逻辑移至 setup()
  • this 访问:在 setup() 中无法访问 this,需通过参数或 Composition API 获取上下文。
3. 异步请求的位置
  • Vue 2:通常在 createdmounted 中发起请求。

  • Vue 3:推荐在 onMounted 中执行:

    setup() {const data = ref(null);onMounted(async () => {data.value = await fetchData();});return { data };
    }
    

常见问题

1. Vue 3 中能否同时使用 Options API 和 Composition API?
  • 可以,但推荐统一风格。例如,在 setup 中使用 Composition API 钩子,避免混用。
2. 为什么 Vue 3 移除了 beforeCreatecreated
  • 这两个阶段的逻辑被 setup 函数完全替代,setup 的执行时机在 beforeCreate 之前。
3. 如何监听 props 变化?
  • 使用 watchwatchEffect

    setup(props) {watch(() => props.id, (newId) => {fetchData(newId);});
    }
    
4. createdmounted 有什么区别?
  • created(Vue 2):组件数据已初始化,但 DOM 未生成。
  • mounted:DOM 已渲染完成,可安全操作元素。
    在 Vue 3 中,setup 替代了 created,初始化逻辑应写在 setuponMounted 中。
5. 异步请求放在哪个钩子?
  • 推荐在 onMounted(确保 DOM 已挂载,适合依赖 DOM 的操作)。
  • 如果无需 DOM,也可在 setup 中直接调用。
6. 为什么 onUpdated 要慎用?
  • onUpdated 中修改数据可能导致无限循环(数据变化 → 触发更新 → 再次修改数据)。

版权声明:

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

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