当前位置: 首页 > news >正文

vue3个生命周期解析,及setup

合理使用各生命周期,切勿乱用,不是所有东西都需要,合理使用可以提高效率和性能。


Vue 3 生命周期钩子详解

Vue 3的生命周期钩子分为以下几个阶段:

  1. onBeforeMount

    • 调用时机:在组件挂载到DOM之前调用。
    • 使用场景:在挂载前进行一些初始化操作,如设置默认值或准备数据。
    • 示例
      import { onBeforeMount } from 'vue';export default {setup() {onBeforeMount(() => {console.log('Component is about to be mounted!');});}
      };
      
  2. onMounted

    • 调用时机:在组件挂载到DOM之后调用。
    • 使用场景:执行DOM操作、发起网络请求或初始化第三方库。
    • 示例
      import { onMounted } from 'vue';export default {setup() {onMounted(() => {console.log('Component is mounted!');});}
      };
      
  3. onBeforeUpdate

    • 调用时机:在组件更新之前调用,即在响应式数据变化后,DOM重新渲染之前。
    • 使用场景:在更新前获取DOM的当前状态或执行清理操作。
    • 示例
      import { onBeforeUpdate } from 'vue';export default {setup() {onBeforeUpdate(() => {console.log('Component is about to update!');});}
      };
      
  4. onUpdated

    • 调用时机:在组件更新之后调用,即DOM重新渲染之后。
    • 使用场景:在更新后执行DOM操作或检查更新后的状态。
    • 示例
      import { onUpdated } from 'vue';export default {setup() {onUpdated(() => {console.log('Component has been updated!');});}
      };
      
  5. onBeforeUnmount

    • 调用时机:在组件卸载之前调用。
    • 使用场景:清理工作,如取消事件监听器或清除定时器。
    • 示例
      import { onBeforeUnmount } from 'vue';export default {setup() {onBeforeUnmount(() => {console.log('Component is about to be unmounted!');});}
      };
      
  6. onUnmounted

    • 调用时机:在组件卸载之后调用。
    • 使用场景:执行最终的清理操作,如释放资源或取消订阅。
    • 示例
      import { onUnmounted } from 'vue';export default {setup() {onUnmounted(() => {console.log('Component has been unmounted!');});}
      };
      
  7. onErrorCaptured

    • 调用时机:在捕获到后代组件的错误时调用。
    • 使用场景:处理组件树中的错误,如记录错误信息或显示错误提示。
    • 示例
      import { onErrorCaptured } from 'vue';export default {setup() {onErrorCaptured((err, instance, info) => {console.error('Error captured:', err);return false; // 阻止错误继续向上传播});}
      };
      
  8. onActivatedonDeactivated

    • 调用时机:分别在被<keep-alive>缓存的组件激活和停用时调用。
    • 使用场景:在组件被缓存和恢复时执行特定逻辑,如重新获取数据或重置状态。
    • 示例
      import { onActivated, onDeactivated } from 'vue';export default {setup() {onActivated(() => {console.log('Component is activated!');});onDeactivated(() => {console.log('Component is deactivated!');});}
      };
      

setup 函数详解

setup 是Vue 3组合式API的核心函数,用于替代Vue 2中的datamethodscomputed等选项。它的主要作用包括:

  1. 定义响应式数据

    • 使用refreactive定义响应式数据。
    • 示例
      import { ref, reactive } from 'vue';export default {setup() {const count = ref(0); // 基本类型const state = reactive({ name: 'Vue 3' }); // 对象类型return { count, state };}
      };
      
  2. 定义方法

    • 直接在setup中定义方法并返回。
    • 示例
      import { ref } from 'vue';export default {setup() {const count = ref(0);const increment = () => {count.value++;};return { count, increment };}
      };
      
  3. 使用生命周期钩子

    • setup中调用生命周期钩子函数。
    • 示例
      import { onMounted } from 'vue';export default {setup() {onMounted(() => {console.log('Component is mounted!');});}
      };
      
  4. 返回模板使用的数据和方法

    • setup返回的对象可以直接在模板中使用。
    • 示例
      import { ref } from 'vue';export default {setup() {const message = ref('Hello, Vue 3!');return { message };}
      };
      
  5. 接收propscontext

    • setup接收两个参数:propscontext
    • props是组件的属性,context包含attrsslotsemit等。
    • 示例
      export default {props: ['title'],setup(props, context) {console.log('Props:', props.title);context.emit('custom-event', 'Hello from setup!');}
      };
      

完整示例

以下是一个完整的Vue 3组件示例,展示了setup和生命周期钩子的使用:

<template><div><p>{{ message }}</p><button @click="increment">Count: {{ count }}</button></div>
</template><script>
import { ref, onMounted, onUnmounted } from 'vue';export default {setup() {const count = ref(0);const message = ref('Hello, Vue 3!');const increment = () => {count.value++;};onMounted(() => {console.log('Component is mounted!');});onUnmounted(() => {console.log('Component is unmounted!');});return { count, message, increment };}
};
</script>
http://www.xdnf.cn/news/529201.html

相关文章:

  • 遨游科普:三防平板是什么?有什么作用?
  • 线光谱共焦传感器:复杂材质检测
  • MCU 温度采样理论(-ADC Temperature sensor)
  • 用户账号及权限管理:企业安全的基石与艺术
  • python训练营day29
  • CAN总线采样点不一致的危害
  • 26、DAPO论文笔记(解耦剪辑与动态采样策略优化,GRPO的改进)
  • 计算机网络(2)——应用层(上)
  • Spring_Boot(一)Hello spring boot!
  • 2025年- H32-Lc140 --21. 合并两个有序链表--Java版
  • BM25(Best Matching 25)介绍与使用
  • BC27 计算球体的体积
  • hexo博客搭建使用
  • 数据库-oracle-包-视图传参
  • upload靶场1-5关
  • 【MYSQL】基本查询,表的增删查改
  • 云原生攻防1(基础介绍)
  • Unity预制体变体(Prefab Variants)、接口(Interface)、抽象类(Abstract Class)、枚举(Enumeration)
  • 如何快速更换电脑浏览器ip:教程与注意事项
  • Seata源码—6.Seata AT模式的数据源代理二
  • leetcode 74. Search a 2D Matrix
  • SQL注入——Sqlmap工具使用
  • 实景VR展厅制作流程与众趣科技实景VR展厅应用
  • Assistants API
  • upload-labs靶场通关详解:第10关
  • 项目QT+ffmpeg+rtsp(三)——延迟巨低的项目+双屏显示
  • FPGA 串口_波特率计算
  • 使用Python和FastAPI构建网站爬虫:Oncolo医疗文章抓取实战
  • [学习]POSIX消息队列的原理与案例分析(完整示例代码)
  • 循环神经网络:揭秘RNN的核心与应用