微信小程序: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

相关文章
|
10天前
|
移动开发 JavaScript 前端开发
如何识别app中的页面是否是js(h5)页面
如何识别app中的页面是否是js(h5)页面
23 2
|
6天前
|
小程序
微信小程序-其他常用组件
该内容是关于微信小程序组件的介绍,主要包括`button`、`image`和`navigator`。`button`组件比HTML的按钮功能更丰富,通过`open-type`可调用微信功能,如客服、转发等。组件属性包括类型(如`primary`、`warn`)和尺寸(`size`)。`image`组件默认宽300px,高240px,支持设置属性来调整显示效果。`navigator`组件用于页面导航,类似HTML的a标签,常用于页面间的跳转。
14 0
|
6天前
|
小程序
微信小程序-常用的基础内容组件
以下是内容的摘要: 本文介绍了微信小程序中几个重要的组件:text、rich-text和progress。text组件类似于HTML的span标签,用于显示文本,通过selectable属性可实现长按选中文本。rich-text组件能够将HTML字符串渲染成WXML结构,展示富文本内容。progress组件则用于展示进度条,支持不同状态(如成功、警告、等待等)以及自定义颜色和宽度。icon组件则提供了一组预定义的图标,可用于表示各种操作状态或提示信息。
9 0
|
6天前
|
小程序 前端开发 定位技术
微信小程序-常用的视图容器类组件
该内容是关于微信小程序组件的分类和部分具体组件的介绍。主要分为9大类:视图容器、基础内容、表单组件、导航组件、媒体组件、地图组件、画布组件、开放能力和无障碍访问。其中详细讲解了`view`、`scroll-view`、`swiper`及`swiper-item`等组件的用途和示例。`view`用于构建页面布局,`scroll-view`支持滚动效果,`swiper`则用于创建轮播图。此外,还提到了`root-portal`、`page-container`等其他特殊用途的组件。
10 0
|
7天前
|
XML 小程序 JavaScript
小程序页面传值
本文介绍了微信小程序中父子页面的传值方法。父页面向子页面传值可通过绑定事件跳转,使用`data-`属性传递参数,然后在子页面的`onLoad`中接收。子页面向父页面传值则通过用户选择内容后调用父页面的方法,利用`getCurrentPages()`获取父页面实例,进而修改父页面的数据。
16 2
|
7天前
|
小程序 JavaScript 数据库
小程序登录页面
该文介绍了使用小程序云开发实现登录和注册的步骤,包括界面设计和后端逻辑。界面使用了`wxss`和`wxml`编写,样式精致,包含手机号和密码输入、登录按钮、注册和忘记密码选项。在`js`中,重点处理了用户输入的账号和密码,通过云数据库查询验证用户是否存在,使用标志位`flag`判断,若账号或密码错误,显示相应提示。文章总结了利用for循环比对数据库账号的难点,并表达了作者的学习心得。
17 1
|
9天前
|
移动开发 网络协议 安全
HTML5页面被运营商DNS问题及解决方案,app中h5页面源码的获取
HTML5页面被运营商DNS问题及解决方案,app中h5页面源码的获取
65 4
|
6天前
|
小程序 UED
人力资源小程序的设计与开发步骤
人力资源小程序的设计与开发步骤
|
8天前
|
小程序 API 数据安全/隐私保护
微信小程序开发中的一些常用标签
这些标签是微信小程序开发中的基础,开发者可以根据需要组合使用这些标签来构建小程序的界面。每个标签都有其属性和事件,可以通过属性来调整组件的样式和行为,通过事件来响应用户的操作。
21 5
|
1天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的校园二手交易平台的设计与开发附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的校园二手交易平台的设计与开发附带文章和源代码设计说明文档ppt
10 2