关于uni-app页面Page和组件Component生命周期执行的先后顺序

简介: 关于uni-app页面Page和组件Component生命周期执行的先后顺序

H5和微信小程序的生命周期函数调用顺序不一致

H5

page beforeCreate
page onLoad
page onShow
page created
page beforeMount
component beforeCreate
component created
component beforeMount
component mounted
page onReady
page mounted

微信小程序

page beforeCreate
page created
page beforeMount
component beforeCreate
component created
component beforeMount
page onLoad
page onShow
component mounted
page mounted
page onReady


一般情况下,主要使用的周期函数如下,他们的执行顺序是固定的

page onLoad
component mounted
page mounted

测试代码

页面

<template>
  <view class="page-container">
    <TestComponent></TestComponent>
  </view>
</template>
<script lang="ts">
// @ts-nocheck
import Vue from 'vue'
import type { PropType } from 'vue'
import TestComponent from './components/TestComponent.vue'
export default Vue.extend({
  components: {
    TestComponent,
  },
  props: {},
  data() {
    return {}
  },
  // 监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad
  onInit() {
    console.log('page onInit')
  },
  // 监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参)
  onLoad() {
    console.log('page onLoad')
  },
  // 监听页面卸载
  onUnload() {
    console.log('page onUnload')
  },
  // 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
  onShow() {
    console.log('page onShow')
  },
  // 监听页面隐藏
  onHide() {
    console.log('page onHide')
  },
  // 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
  onReady() {
    console.log('page onReady')
  },
  // 监听窗口尺寸变化
  onResize() {
    console.log('page onResize')
  },
  // 监听用户下拉动作,一般用于下拉刷新
  onPullDownRefresh() {
    console.log('page onPullDownRefresh')
  },
  // 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
  onReachBottom() {
    console.log('page onReachBottom')
  },
  // 用户点击右上角分享
  onTabItemTap() {
    console.log('page onTabItemTap')
  },
  // 用户点击右上角分享
  onShareAppMessage() {
    console.log('page onShareAppMessage')
  },
  // 监听页面滚动,参数为Object
  onPageScroll() {
    console.log('page onPageScroll')
  },
  // 监听原生标题栏按钮点击事件,参数为Object
  onNavigationBarButtonTap() {
    console.log('page onNavigationBarButtonTap')
  },
  // 监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;
  onBackPress() {
    console.log('page onBackPress')
  },
  // 监听原生标题栏搜索输入框输入内容变化事件
  onNavigationBarSearchInputChanged() {
    console.log('page onNavigationBarSearchInputChanged')
  },
  // 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。
  onNavigationBarSearchInputConfirmed() {
    console.log('page onNavigationBarSearchInputConfirmed')
  },
  // 监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发)
  onNavigationBarSearchInputClicked() {
    console.log('page onNavigationBarSearchInputClicked')
  },
  // 监听用户点击右上角转发到朋友圈
  onShareTimeline() {
    console.log('page onShareTimeline')
  },
  // 监听用户点击右上角收藏
  onAddToFavorites() {
    console.log('page onAddToFavorites')
  },
  // 在实例初始化之前被调用
  beforeCreate() {
    console.log('page beforeCreate')
  },
  // 在实例创建完成后被立即调用
  created() {
    console.log('page created')
  },
  // 在挂载开始之前被调用
  beforeMount() {
    console.log('page beforeMount')
  },
  // 挂载到实例上去之后调用注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTickVue官方文档
  mounted() {
    console.log('page mounted')
  },
  // 数据更新时调用,发生在虚拟 DOM 打补丁之前。详见  仅H5平台支持
  beforeUpdate() {
    console.log('page beforeUpdate')
  },
  // 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。详见  仅H5平台支持
  updated() {
    console.log('page updated')
  },
  // 实例销毁之前调用。在这一步,实例仍然完全可用。详见
  beforeDestroy() {
    console.log('page beforeDestroy')
  },
  // Vue 实例销毁后调用。调用后,Vue  实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
  destroyed() {
    console.log('page destroyed')
  },
  methods: {},
})
</script>
<style>

组件 components/TestComponent.vue

<template>
  <view class="component-container">component</view>
</template>
<script lang="ts">
// @ts-nocheck
import Vue from 'vue'
import type { PropType } from 'vue'
export default Vue.extend({
  components: {},
  props: {},
  data() {
    return {}
  },
  // 在实例初始化之前被调用
  beforeCreate() {
    console.log('component beforeCreate')
  },
  // 在实例创建完成后被立即调用
  created() {
    console.log('component created')
  },
  // 在挂载开始之前被调用
  beforeMount() {
    console.log('component beforeMount')
  },
  // 挂载到实例上去之后调用注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTickVue官方文档
  mounted() {
    console.log('component mounted')
  },
  // 数据更新时调用,发生在虚拟 DOM 打补丁之前。详见  仅H5平台支持
  beforeUpdate() {
    console.log('component beforeUpdate')
  },
  // 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。详见  仅H5平台支持
  updated() {
    console.log('component updated')
  },
  // 实例销毁之前调用。在这一步,实例仍然完全可用。详见
  beforeDestroy() {
    console.log('component beforeDestroy')
  },
  // Vue 实例销毁后调用。调用后,Vue  实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
  destroyed() {
    console.log('component destroyed')
  },
  methods: {},
})
</script>
<style></style>
相关文章
|
2月前
|
缓存 数据处理 UED
App加载页面的等待体验设计技巧
App加载页作为整个用户体验的一部分,直接影响用户对于产品服务的忠诚度和满意度。
57 13
|
3月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
267 1
|
3月前
|
存储 API 数据库
uniapp APP自动更新组件
uniapp APP自动更新组件
108 1
|
3月前
|
前端开发 UED 开发者
uni-app:去除导航栏&跨域的问题&blobe查看图片&v-deep&页面操作 (五)
本文介绍了几个前端开发技巧:1) 如何通过设置 `navigationStyle` 为 `custom` 去除顶部导航;2) 解决跨域问题的方法,包括使用 `dotenv` 加载全局变量和配置 `devServer` 的代理;3) 使用 Blob 和 FileReader 查看图片;4) 利用 `v-deep` 深度作用选择器修改样式;5) 修改页面左上角返回按钮的行为。
|
3月前
|
存储 前端开发 UED
uni-app:基础组件 (下)
本文介绍了多种前端组件及其用法,包括:label 组件用于表单元素的标签;picker 组件用于实现日期、时间及普通列表的选择器;textarea 组件用于输入多行文本,并可通过 v-model 双向绑定数据;process 组件用于显示进度条;swiper 组件用于轮播图展示;match-media 组件根据屏幕尺寸展示内容;audio 组件用于播放音频;switch 组件用于开关选择;scroll-view 组件实现滚动视图功能;以及 storage 的使用方法,如设置、获取和移除本地存储等。
|
3月前
|
存储 前端开发 JavaScript
uni-app:基础组件 (上)
本文介绍了uni-app中多个组件的使用方法,包括存储操作、图标展示、按钮样式、表单输入、导航跳转和输入框控制等。通过具体代码示例展示了如何设置存储键值、使用不同类型的按钮、实现表单提交与重置功能、控制输入框的显示与清除等功能。
|
4月前
|
移动开发 小程序 前端开发
uni-app组件样式修改不生效
uni-app组件样式修改不生效
|
5月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
|
5月前
|
安全 JavaScript 应用服务中间件
【Azure Function App】如何修改Azure函数应用的默认页面呢?
【Azure Function App】如何修改Azure函数应用的默认页面呢?
|
4天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。