优秀的编程知识分享平台

网站首页 > 技术文章 正文

五、uni-app + Vue3 生命周期函数大全

nanyue 2024-11-03 14:03:10 技术文章 8 ℃

在 vue3 组合式 API 中,也要遵循 uni-app 生命周期钩子规范。

一、应用生命周期函数

uni-app 支持的生命周期函数:

函数名

说明

onLaunch

uni-app 初始化完成时触发(全局只触发一次)

onShow

uni-app 启动,或从后台进入前台显示

onHide

uni-app 从前台进入后台

onError

uni-app 报错时触发

onUniNViewMessage

nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯(opens new window)

onUnhandledRejection

对未处理的 Promise 拒绝事件监听函数(2.8.1+)

onPageNotFound

页面不存在监听函数

onThemeChange

监听系统主题变化

vue3 组合式API 使用:

<script>
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"
export default{
	setup(){
    // 只能在App.vue里监听应用的生命周期
		onLaunch(() => {
			console.log("APP onLaunch");
		})
		onShow(() => {
			console.log("APP onShow");
		})
		onHide(() => {
			console.log("APP onHide");
		})
	}
}
</script>

vue3 setup 语法糖使用:

<script setup>
import {onLaunch, onShow, onHide} from "@dcloudio/uni-app"
onLaunch(()=>{
	console.log("APP onLaunch");
})
onShow(()=>{
	console.log("APP onShow");
})
onHide(()=>{
	console.log("APP onHide");
})
</script>

注意

  • 应用生命周期仅可在App.vue中监听,在其它页面监听无效。
  • 应用启动参数,可以在API uni.getLaunchOptionsSync获取,详见(opens new window)
  • onlaunch里进行页面跳转,如遇白屏报错,请参考https://ask.dcloud.net.cn/article/35942(opens new window)
  • App.vue 不能写模板
  • onPageNotFound 页面实际上已经打开了(比如通过分享卡片、小程序码)且发现页面不存在,才会触发,api 跳转不存在的页面不会触发(如 uni.navigateTo)

二、页面生命周期函数:

uni-app 支持的页面生命周期函数有:

函数名

说明

平台差异说明

最低版本

onInit

监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad

百度小程序

3.1.0+

onLoad

监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参)



onShow

监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面



onReady

监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发



onHide

监听页面隐藏



onUnload

监听页面卸载



onResize

监听窗口尺寸变化

App、微信小程序、快手小程序


onPullDownRefresh

监听用户下拉动作,一般用于下拉刷新



onReachBottom

页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项



onTabItemTap

点击 tab 时触发,参数为Object,具体见下方注意事项

微信小程序、QQ小程序、支付宝小程序、百度小程序、H5、App、快手小程序、京东小程序


onShareAppMessage

用户点击右上角分享

微信小程序、QQ小程序、支付宝小程序、字节小程序、飞书小程序、快手小程序、京东小程序


onPageScroll

监听页面滚动,参数为Object

nvue暂不支持


onNavigationBarButtonTap

监听原生标题栏按钮点击事件,参数为Object

App、H5


onBackPress

监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:onBackPress 详解 (opens new window)。支付宝小程序只有真机能触发,只能监听非navigateBack引起的返回,不可阻止默认行为。

app、H5、支付宝小程序


onNavigationBarSearchInputChanged

监听原生标题栏搜索输入框输入内容变化事件

App、H5

1.6.0

onNavigationBarSearchInputConfirmed

监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。

App、H5

1.6.0

onNavigationBarSearchInputClicked

监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发)

App、H5

1.6.0

onShareTimeline

监听用户点击右上角转发到朋友圈

微信小程序

2.8.1+

onAddToFavorites

监听用户点击右上角收藏

微信小程序

2.8.1+

使用示例:

<script setup>
  import { onLoad, onShow, onPageScroll, onReachBottom, onPullDownRefresh } from "@dcloudio/uni-app"
	onLoad(option => {
		console.log('上个页面传递的参数',option);
	})
	onShow(()=>{
		console.log("组件onShow");
	})
	onReachBottom(()=>{
    // 可以配置 onReachBottomDistance 设置触发距离
		console.log("到达底部");
	})
	onPageScroll(()=>{
		console.log("滚动条滚动");
	})
	onPullDownRefresh(()=>{
    // 必须开启 enablePullDownRefresh 参数配置
		console.log("下拉刷新");
	})
</script>


三、组件的生命周期

vue3 组件生命周期钩子函数有:

vue3 选项式 API

Hook inside setup

说明

beforeCreate

Not needed*

在实例初始化之前被调用

created

Not needed*

在实例创建完成后被立即调用

beforeMount

onBeforeMount

在挂载开始之前被调用

mounted

onMounted

挂载到实例上去之后调用。

beforeUpdate

onBeforeUpdate

数据更新时调用,发生在虚拟 DOM 打补丁之前。

updated

onUpdated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

beforeUnmount

onBeforeUnmount

实例销毁之前调用。在这一步,实例仍然完全可用。

unmounted

onUnmounted

Vue 实例销毁后调用。

errorCaptured

onErrorCaptured


renderTracked

onRenderTracked

用于调试。

renderTriggered

onRenderTriggered

用于调试。

activated

onActivated

有 keep-alive 时才会触发,进入组件执行。

deactivated

onDeactivated

有 keep-alive 时才会触发,移出组件时执行。

最近发表
标签列表