学习vue3系列生命周期

Vue3引入了新的组合式API,包括onMounted等生命周期钩子,它们需在setup()内同步使用。依赖注入通过provide和inject实现,同时还有readonly、isRef等工具函数增强开发体验。这些改变提高了代码的复用性和灵活性。
摘要由CSDN通过智能技术生成

vue3 增加了些生命周期,可以直接导入 onXXX 一族的函数来注册生命周期钩子:

与 2.x 版本生命周期相对应的组合式 API

  • beforeCreate -> 使用 setup()
  • created -> 使用 setup()
  • beforeMount -> onBeforeMount
  • mounted -> onMounted
  • beforeUpdate -> onBeforeUpdate
  • updated -> onUpdated
  • beforeDestroy -> onBeforeUnmount
  • destroyed -> onUnmounted
  • errorCaptured -> onErrorCaptured 
import { onMounted, onUpdated, onUnmounted } from 'vue'

const MyComponent = {
  setup() {
    onMounted(() => {
      console.log('mounted!')
    })
    onUpdated(() => {
      console.log('updated!')
    })
    onUnmounted(() => {
      console.log('unmounted!')
    })
  },
}

这些生命周期钩子注册函数只能在 setup() 期间同步使用, 因为它们依赖于内部的全局状态来定位当前组件实例(正在调用 setup() 的组件实例), 不在当前组件下调用这些函数会抛出一个错误。

生命周期的用法和 vue2 无太大的区别,只是使用的时候记得把 API 导入进来。 

依赖注入

Vue 组合式 API对依赖注入提供了 provide 和 inject 函数,功能类似 vue2 options API 的 provide/inject。provide 和 inject 函数都只能在当前活动组件实例的 setup() 中调用。

在上游组件提供 provide :

  setup () {
    provide('Theme', 'dark')
  }

在下游组件使用 :

<template>
  <div> hello </div>
</template>

<script>
import { ref, inject } from 'vue'
export default {
  setup () {
    const theme = inject('Theme', 'light' /* 默认值 */)
    console.log(theme, '依赖注入')
  }
}
</script>

工具函数

vue3 还有一些其它API,这个工具函数如下:

  • readonly 把对象变成只读的。
  • isRef 检查一个值是否为一个 ref 对象。
  • isProxy 检查一个对象是否是由 reactive 或者 readonly 方法创建的代理。
  • isReactive检查一个对象是否是由 reactive 创建的响应式代理。
  • isReadonly检查一个对象是否是由 readonly 创建的只读代理。
  • unref如果参数是一个 ref 则返回它的 value,否则返回参数本身

当我们在组件间提取并复用逻辑时,组合式 API 是十分灵活的。一个组合函数仅依赖它的参数和 Vue 全局导出的 API,而不是依赖其微妙的 this 上下文。你可以将组件内的任何一段逻辑导出为函数以复用它。你甚至可以通过导出整个 setup 函数达到和 extends 等价的效果。

回答: 在Vue3中,生命周期方法被重命名为钩子函数,并且有一些变化。下面是Vue2和Vue3中相应的生命周期方法对比: - beforeCreate -> setup(() => {}): 在Vue2中,beforeCreate生命周期方法在实例被创建之前调用,而在Vue3中,这个逻辑被移动到了setup函数中。 - created -> setup(() => {}): 在Vue2中,created生命周期方法在实例创建完成后调用,而在Vue3中,这个逻辑也被移动到了setup函数中。 - beforeMount -> onBeforeMount(() => {}): 在Vue2中,beforeMount生命周期方法在实例挂载之前调用,而在Vue3中,这个逻辑被移动到了onBeforeMount函数中。 - mounted -> onMounted(() => {}): 在Vue2中,mounted生命周期方法在实例挂载完成后调用,而在Vue3中,这个逻辑被移动到了onMounted函数中。 - beforeUpdate -> onBeforeUpdate(() => {}): 在Vue2中,beforeUpdate生命周期方法在实例更新之前调用,而在Vue3中,这个逻辑被移动到了onBeforeUpdate函数中。 - updated -> onUpdated(() => {}): 在Vue2中,updated生命周期方法在实例更新完成后调用,而在Vue3中,这个逻辑被移动到了onUpdated函数中。 - beforeDestroy -> onBeforeUnmount(() => {}): 在Vue2中,beforeDestroy生命周期方法在实例销毁之前调用,而在Vue3中,这个逻辑被移动到了onBeforeUnmount函数中。 - destroyed -> onUnmounted(() => {}): 在Vue2中,destroyed生命周期方法在实例销毁完成后调用,而在Vue3中,这个逻辑被移动到了onUnmounted函数中。 - activated -> onActivated(() => {}): 在Vue2中,activated生命周期方法在keep-alive组件激活时调用,而在Vue3中,这个逻辑被移动到了onActivated函数中。 - deactivated -> onDeactivated(() => {}): 在Vue2中,deactivated生命周期方法在keep-alive组件停用时调用,而在Vue3中,这个逻辑被移动到了onDeactivated函数中。 - errorCaptured -> onErrorCaptured(() => {}): 在Vue2中,errorCaptured生命周期方法用于捕获子孙组件的异常,而在Vue3中,这个逻辑被移动到了onErrorCaptured函数中。 [2 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [学习vue3系列生命周期](https://blog.csdn.net/wu_xianqiang/article/details/107877456)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Vue3生命周期](https://blog.csdn.net/m0_57341617/article/details/126426931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北海屿鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值