微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序

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

目录

H5

微信小程序

测试代码

文档


页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle

组件生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle

经测试,得出结论:


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></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>

————————————————

版权声明:本文为CSDN博主「彭世瑜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mouday/article/details/130219500

相关文章
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
3859 7
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
4271 1
|
缓存 小程序 API
微信小程序页面导航与路由:实现多页面跳转与数据传递
本文深入探讨微信小程序的页面导航与路由机制,介绍多种页面跳转方式如`wx.navigateTo`、`wx.redirectTo`、`wx.switchTab`等,并讲解通过URL、全局变量和事件传递数据的方法。结合案例实现多页面跳转与数据传递,帮助开发者掌握这一重要技能。
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
831 1
微信小程序:轻松实现时间轴组件
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
2819 1
|
缓存 小程序 UED
如何利用小程序的生命周期函数实现数据的加载和更新?
如何利用小程序的生命周期函数实现数据的加载和更新?
416 4
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
991 0
微信小程序:自定义关注公众号组件样式
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
1661 1
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
1117 1