Appearance
uni-app 组件/应用生命周期
应用生命周期
uni-app 应用生命周期是指应用从启动到关闭的整个过程,包括以下几个关键阶段:
onLaunch
- 触发时机:应用初始化完成时触发
- 作用:可以在这里进行全局初始化操作,如加载全局数据、初始化SDK等
- 参数:包含 query 参数,如通过URL启动应用时的参数
onShow
- 触发时机:应用启动或从后台进入前台时触发
- 作用:可以在这里处理页面显示相关的逻辑,如刷新数据、恢复状态等
- 参数:包含 query 参数
onHide
- 触发时机:应用从前台进入后台时触发
- 作用:可以在这里处理页面隐藏相关的逻辑,如暂停计时器、保存状态等
onError
- 触发时机:应用发生错误时触发
- 作用:可以在这里捕获错误信息,进行错误上报等
- 参数:错误信息对象
onUniNViewMessage
- 触发时机:nvue 页面向应用发送消息时触发
- 作用:处理 nvue 页面发送的消息
- 参数:消息对象
页面生命周期
uni-app 页面生命周期是指页面从创建到销毁的过程,包括以下几个关键阶段:
onLoad
- 触发时机:页面加载时触发
- 作用:可以在这里获取页面参数,初始化页面数据
- 参数:包含页面参数的对象
onShow
- 触发时机:页面显示时触发
- 作用:可以在这里处理页面显示相关的逻辑,如刷新数据等
onReady
- 触发时机:页面初次渲染完成时触发
- 作用:可以在这里获取页面元素,进行DOM操作
onHide
- 触发时机:页面隐藏时触发
- 作用:可以在这里处理页面隐藏相关的逻辑
onUnload
- 触发时机:页面卸载时触发
- 作用:可以在这里清理资源,如取消定时器、解绑事件等
onResize
- 触发时机:页面尺寸变化时触发
- 作用:可以在这里处理页面尺寸变化相关的逻辑
- 参数:包含尺寸信息的对象
onPullDownRefresh
- 触发时机:用户下拉刷新时触发
- 作用:可以在这里处理下拉刷新逻辑,如重新加载数据
onReachBottom
- 触发时机:页面滚动到底部时触发
- 作用:可以在这里处理上拉加载更多逻辑
onTabItemTap
- 触发时机:点击底部tab栏时触发
- 作用:可以在这里处理tab切换相关的逻辑
- 参数:包含tab信息的对象
onShareAppMessage
- 触发时机:用户点击分享时触发
- 作用:可以在这里自定义分享内容
- 返回值:分享信息对象
onPageScroll
- 触发时机:页面滚动时触发
- 作用:可以在这里处理页面滚动相关的逻辑
- 参数:包含滚动信息的对象
onNavigationBarButtonTap
- 触发时机:点击导航栏按钮时触发
- 作用:可以在这里处理导航栏按钮点击事件
- 参数:包含按钮信息的对象
onBackPress
- 触发时机:用户点击返回按钮时触发
- 作用:可以在这里处理返回逻辑,如拦截返回操作
- 返回值:布尔值,true表示拦截返回,false表示不拦截
组件生命周期
uni-app 组件生命周期与 Vue 组件生命周期基本一致,包括以下几个关键阶段:
beforeCreate
- 触发时机:组件实例创建前触发
- 作用:可以在这里进行组件初始化前的准备工作
created
- 触发时机:组件实例创建完成时触发
- 作用:可以在这里获取数据,初始化组件状态
beforeMount
- 触发时机:组件挂载前触发
- 作用:可以在这里进行挂载前的准备工作
mounted
- 触发时机:组件挂载完成时触发
- 作用:可以在这里获取DOM元素,进行DOM操作
beforeUpdate
- 触发时机:组件更新前触发
- 作用:可以在这里进行更新前的准备工作
updated
- 触发时机:组件更新完成时触发
- 作用:可以在这里处理更新后的逻辑
beforeUnmount
- 触发时机:组件卸载前触发
- 作用:可以在这里清理资源,如取消定时器、解绑事件等
unmounted
- 触发时机:组件卸载完成时触发
- 作用:可以在这里进行最终的清理工作
生命周期执行顺序
应用启动时
- onLaunch (应用初始化)
- onShow (应用显示)
- 页面 onLoad (页面加载)
- 页面 onShow (页面显示)
- 页面 onReady (页面渲染完成)
页面跳转时
- 旧页面 onHide (旧页面隐藏)
- 新页面 onLoad (新页面加载)
- 新页面 onShow (新页面显示)
- 新页面 onReady (新页面渲染完成)
页面返回时
- 新页面 onUnload (新页面卸载)
- 旧页面 onShow (旧页面显示)
生命周期注意事项
应用生命周期
- onLaunch 只触发一次,在应用初始化时
- onShow 和 onHide 会在应用前后台切换时触发
- onError 可以捕获应用级别的错误
页面生命周期
- onLoad 只触发一次,在页面加载时
- onShow 会在页面显示时触发,包括从后台进入前台
- onUnload 会在页面卸载时触发,包括返回上一页
- onPullDownRefresh 需要在页面配置中开启 enablePullDownRefresh
- onReachBottom 需要在页面配置中设置 onReachBottomDistance
组件生命周期
- 组件生命周期与 Vue 组件生命周期一致
- 组件实例创建后会依次执行 beforeCreate、created、beforeMount、mounted
- 组件更新时会依次执行 beforeUpdate、updated
- 组件卸载时会依次执行 beforeUnmount、unmounted
生命周期最佳实践
数据初始化
- 应用级数据初始化放在 onLaunch
- 页面级数据初始化放在 onLoad
- 组件级数据初始化放在 created
资源管理
- 定时器、事件监听器等资源在 onUnload 或 unmounted 中清理
- 页面隐藏时可以在 onHide 中暂停定时器
- 页面显示时可以在 onShow 中恢复定时器
性能优化
- 避免在 onShow 中进行大量计算
- 合理使用缓存,减少重复请求
- 避免在生命周期钩子中进行复杂的DOM操作
常见问题
生命周期不触发
- 检查页面路径是否正确
- 检查组件是否正确注册
- 检查是否有错误阻止了生命周期执行
生命周期执行顺序错误
- 了解正确的生命周期执行顺序
- 避免在生命周期钩子中进行异步操作导致的顺序问题
性能问题
- 优化生命周期钩子中的代码
- 避免在生命周期钩子中进行耗时操作
- 使用防抖和节流优化频繁触发的生命周期钩子