Skip to content

生命周期

页面生命周期

何为“页面”

uni-app 项目中,一个页面就是一个符合 Vue SFC 规范 的 vue 文件。

在 uni-app js 引擎版中,后缀名是 .vue 文件或 .nvue 文件:

  • 非 app 平台,优先使用 vue
  • app 平台,优先使用 nvue

提示

页面级既有 页面生命周期,也有 组件生命周期

页面状态

函数名说明
onLoad页面加载时触发
接收上一个页面传递的参数(通过 options 参数),适合 初始化 页面数据
onShow页面显示时触发,包括首次加载和从其他页面返回时
适合执行页面显示时的逻辑,如:刷新数据
onReady页面初次渲染完成时触发
适合操作 DOM 或执行需要页面渲染完成后的逻辑
onHide页面隐藏时触发,如跳转到其他页面
适合清理页面隐藏时的逻辑,如取消定时器
onUnload页面卸载时触发,如关闭页面或跳转到其他页面(不会返回)
适合清理页面卸载时的逻辑,如释放资源

页面交互

函数名说明
onPullDownRefresh用户下拉页面时触发
用于实现 下拉刷新 功能
onReachBottom页面滚动到底部时触发
用于实现 上拉加载 功能
onBackPress用户点击返回按钮或 Android 物理返回键时触发
用于 拦截返回 操作
onTabItemTap点击底部 tab 时触发
用于监听 tab 切换 事件
......

示例:

js
import { onLoad } from '@dcloudio/uni-app'

onReachBottom

由于 onReachBottom 一段时间内不可重复触发,所以为了兼容快速向上滑动的情况,需增加一段时间的延迟,防止触底事件失效

js
onReachBottom(() => {
  setTimeout(() => {
    // ...
  }, 500)
})

组件生命周期

提示

组件这里没有页面级的 onLoad 等生命周期!

uni-app 组件支持的生命周期,与 vue 标准组件的生命周期相同。

函数名说明平台差异说明
beforeCreate在实例初始化之前被调用
created在实例创建完成后被立即调用
beforeMount在挂载开始之前被调用
mounted挂载到实例上去之后调用(处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用 $nextTick
beforeUpdate数据更新时调用,发生在虚拟 DOM 打补丁之前仅 H5 平台支持
updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子仅 H5 平台支持
beforeDestroy实例销毁之前调用(在这一步,实例仍然完全可用)
destroyedVue 实例销毁后调用(调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁)

基于 MIT 许可发布