若依App版是基于uniapp的,在 UniApp 中,生命周期分为 应用生命周期页面生命周期组件生命周期

1.应用生命周期
函数名说明
onLaunch当uni-app初始化完成时触发(全局只触发一次)
onShow当uni-app启动,或从后台进入前台显示
onHide当uni-app从前台进入后台
onError当uni-app报错时触发
onUniNViewMessage对nvue页面发送的数据进行监听
onUnhandledRejection对未处理的 Promise 拒绝事件监听函数
onPageNotFound页面不存在监听函数
onThemeChange监听系统主题变化

注意:应用生命周期仅可在App.vue中监听,在其它页面监听无效。

我们修改一下app.vue中的代码,加入下面的代码后

点击“运行”中的“运行到浏览器”,等待一会,可以看到浏览器自动打开。

浏览器打开后,按一下F12,可以看到生命周期函数的内容被正常执行了。

2.页面生命周期

uni-app支持如下声明周期

函数名说明
onInit监听页面初始化
onLoad监听页面加载
onShow监听页面显示
onReady监听页面初次渲染完成
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新
onReachBottom页面上拉触底事件的处理函数
onTabItemTap点击 tab 时触发
onShareAppMessage用户点击右上角分享
onPageScroll监听页面滚动
onNavigationBarButtonTap监听原生标题栏按钮点击事件
onBackPress监听页面返回
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件
onShareTimeline监听用户点击右上角转发到朋友圈
onAddToFavorites监听用户点击右上角收藏

我们在index.vue中新增代码,测试一下页面的生命周期。

代码如下:

<template>
  <view class="content">
    <image class="logo" src="@/static/logo.png"></image>
    <view class="text-area">
      <text class="title">Hello RuoYi</text>
    </view>
  </view>
</template>

<!-- 新增 -->
<script>
	 export default {
		 onInit(){
			 console.log("index页面"+"onInit")
		 },	
		 onLoad(){
			 console.log("index页面"+"onLoad")
		 },
		 onShow(){
			 console.log("index页面"+"onShow")
		 },
		 onReady(){
			 console.log("index页面"+"onReady")
		 },
		 onHide(){
			 console.log("index页面"+"onHide")
		 },
		 onUnload(){
			 console.log("index页面"+"onUnload")
		 },
	 }
</script>	


<style scoped>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }

  .logo {
    height: 200rpx;
    width: 200rpx;
    margin-top: 200rpx;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 50rpx;
  }

  .text-area {
    display: flex;
    justify-content: center;
  }

  .title {
    font-size: 36rpx;
    color: #8f8f94;
  }
</style>

运行效果如下:

3.组件生命周期

uni-app组件支持的生命周期,与vue标准组件的生命周期相同。这里没有页面级的onLoad等生命周期:

函数名说明
beforeCreate在实例初始化之前被调用
created在实例创建完成后被立即调用
beforeMount在挂载开始之前被调用
mounted挂载到实例上去之后调用
beforeUpdate数据更新时调用
updated由于数据更改时调用
beforeDestroy实例销毁之前调用
destroyed实例销毁后调用

我们继续修改index.vue代码,加入组件生命周期,

修改index.vue中的代码如下:

<template>
  <view class="content">
    <image class="logo" src="@/static/logo.png"></image>
    <view class="text-area">
      <text class="title">Hello RuoYi</text>
    </view>
  </view>
</template>

<!-- 新增 -->
<script>
	 export default {
		 onInit(){
			 console.log("index页面"+"onInit")
		 },	
		 onLoad(){
			 console.log("index页面"+"onLoad")
		 },
		 onShow(){
			 console.log("index页面"+"onShow")
		 },
		 onReady(){
			 console.log("index页面"+"onReady")
		 },
		 onHide(){
			 console.log("index页面"+"onHide")
		 },
		 onUnload(){
			 console.log("index页面"+"onUnload")
		 },
		//组件生命周期	
		beforeCreate(){
			console.log("组件"+"beforeCreate")
		},
		created(){
			console.log("组件"+"created")
		},
		beforeMount(){
			console.log("组件"+"beforeMount")
		},
		mounted(){
			console.log("组件"+"mounted")
		},
		beforeUpdate(){
			console.log("组件"+"beforeUpdate")
		},
		updated(){
			console.log("组件"+"updated")
		},
		beforeDestroy(){
			console.log("组件"+"beforeDestroy")
		},
		destroyed(){
			console.log("组件"+"destroyed")
		}
	 }
</script>	


<style scoped>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }

  .logo {
    height: 200rpx;
    width: 200rpx;
    margin-top: 200rpx;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 50rpx;
  }

  .text-area {
    display: flex;
    justify-content: center;
  }

  .title {
    font-size: 36rpx;
    color: #8f8f94;
  }
</style>

重新保存后,运行结果如下: