【微信小程序】组件的生命周期及自定义组件

简介: 【微信小程序】组件的生命周期及自定义组件

组件的生命周期


组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。


其中,最重要的生命周期是 created、attached、 detached ,包含一个组件实例生命流程的最主要时间点。


自定义组件的生命周期函数


小程序组件可用的全部生命周期如下表所示:


生命周期函数 参数 描述说明
created 在组件实例刚刚被创建时执行
attached 在组件实例进入页面节点树时执行
ready 在组件在视图层布局完成后执行
moved 在组件实例被移动到节点树另一个位置时执行
detached 在组件实例被从页面节点树移除时执行
error Object Error 每当组件方法抛出错误时执行


执行顺序



从该图中可以看出组件的 ready 与 detached 执行顺序并没有明确的先后关系。


组件常用的生命周期函数


在小程序组件中,最重要的生命周期函数有3个,分别是createdattached.


detached。它们各自的特点。如下︰


  • 组件实例刚被创建好的时候,created生命周期函数会被触发


  • 此时还不能调用setData,通常在这个生命周期函数中,只应该用于给组件的this添加一些自定义的属性字段在组件


  • 完全初始化完毕、进入页面节点树后,attached生命周期函数会被触发


  • 此时, this.data已被初始化完毕。这个生命周期很有用,绝大多数初始化的工作可以在这个时机进行(例如发请求获取初始数据)


  • 在组件离开页面节点树后,detached生命周期函数会被触发


  • 退出一个页面时,会触发页面内每个自定义组件的detached生命周期函数此时适合做一些清理性质的工作


lifetimes节点


在小程序组件中,生命周期函数可以直接定义在Component构造器的第一级参数中,可以在 lifetimes字段内进行声明(这是推荐的方式,其优先级最高)。如下:


Component({
  lifetimes:{
     created(){
         console.log('created');
     },
     attached(){
         console.log('attached');
     }
  }
)}


注意:若不写在lifetime节点中且同时存在lifetime节点,优先执行lifetime节点中的生命周期函数,并覆盖掉节点之外的生命周期函数。


组件所在页面的生命周期函数


有时,自定义组件的行为依赖于页面状态的变化,此时就需要用到组件所在页面的生命周期。


在自定义组件中,组件所在页面的生命周期函数有如下3个,分别是:


生命周期函数 参数 描述
show 组件所在的页面被展示时执行
hide 组件所在的页面被隐藏时执行
resize object Size 组件所在的页面尺寸变化时执行


pageLifetimes节点


组件所在页面的生命周期函数,需要定义在pageLifetimes节点中,如下:


Component({
  pageLifetimes:{
        show(){
           console.log("show!!");
       },
       hide(){
           console.log("hide!!");
       },
       resize(){
           console.log("resize");
       }            
   }        
)}


当页面显示和隐藏时触发



自定义组件


类似vue或者react中的自定义组件。


微信小程序也 允许我们使用自定义组件的方式来构建页面。


当我们在开发小程序页面时,少不了哪些重复或类似的板块,需要我们复制粘贴一份源码进行编写,而组件恰恰解决了这个问题,它能让我们的代码复用率更高。开发更如鱼得水。


创建自定义组件


类似于页面,一个自定义组件由 .json.wxml.wxss.js 4个文件组成。


创建组件


可以在微信开发者工具中快速创建组件的文件结构。如图



创建好之后,便出现四个文件:如图



定义组件


此时我们新建一个页面-demo,在demo.json中可以使用刚才我们创建好的组件。



使用组件


首先让效果更明显,我们在组件的wxml文件中写入一些东西:



之后我们在页面demo.wxml中使用我们的组件:



出现如上效果则说明我们声明的组件已经被使用了


父组件向子组件传递数据


  1. 父组件(页面)向子组件传递数据通过标签属性的方式来传递



  1. 在子组件的.js文件上进行接收



  1. 注意:若父组件给子组件不传值时则使用value中定义的值。


  1. 在SuHeader.wxml中接收数据即可



子组件向父组件传递数据


  1. 给地址绑定鼠标单击事件



  1. 当单击事件被触发。给通过this.triggerEvent绑定父组件的自定义事件并且给父组件传递数据



  1. 父组件的自定义事件



  1. 在demo.js文件中触发父组件的自定义事件,注意与data配置项平级。



  1. 触发单击响应事件



其他定义段与示例方法


定义段 类型 是否必填 描述
properties object Map 组件的对外属性,是属性名到属性设置的映射表
data object 组件的内部数据,和 properties一同用于模板渲染
observers object 组件数据字段监听器,用于监听 properties和data的变化
methods object 组件的方法,包括事件响应函数和任意的自定义方法
created function 组件生命周期函数,在组件实例刚刚被创建时执行,注意此时不能调用setDat
attached function 组件生念周期函数,在组件实例进入页面节点树时执行
ready Function 组件生命周期函数,在组件布局完成后执行
moved Function 组件生命周期函数,在组件实例被移动到节点树另一个位置时执行
detached Function 组件生命周期函数,在组件实例被从页面节点树移除时执行
目录
相关文章
|
1月前
|
JSON 小程序 前端开发
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
微信小程序按需引入 vant 组件,自动清除项目中未使用的 vant 组件,减少代码包大小,避免因未使用到的 vant 组件触发隐私协议提交审核时被拒
37 1
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
|
21天前
|
小程序 安全
微信小程序自定义底部导航栏
微信小程序自定义底部导航栏
|
23天前
|
JSON 小程序 搜索推荐
微信小程序如何自定义tabbar
微信小程序如何自定义tabbar
18 3
|
1月前
|
小程序
微信小程序-其他常用组件
该内容是关于微信小程序组件的介绍,主要包括`button`、`image`和`navigator`。`button`组件比HTML的按钮功能更丰富,通过`open-type`可调用微信功能,如客服、转发等。组件属性包括类型(如`primary`、`warn`)和尺寸(`size`)。`image`组件默认宽300px,高240px,支持设置属性来调整显示效果。`navigator`组件用于页面导航,类似HTML的a标签,常用于页面间的跳转。
23 0
|
1月前
|
小程序
微信小程序-常用的基础内容组件
以下是内容的摘要: 本文介绍了微信小程序中几个重要的组件:text、rich-text和progress。text组件类似于HTML的span标签,用于显示文本,通过selectable属性可实现长按选中文本。rich-text组件能够将HTML字符串渲染成WXML结构,展示富文本内容。progress组件则用于展示进度条,支持不同状态(如成功、警告、等待等)以及自定义颜色和宽度。icon组件则提供了一组预定义的图标,可用于表示各种操作状态或提示信息。
20 0
|
1月前
|
小程序 前端开发 定位技术
微信小程序-常用的视图容器类组件
该内容是关于微信小程序组件的分类和部分具体组件的介绍。主要分为9大类:视图容器、基础内容、表单组件、导航组件、媒体组件、地图组件、画布组件、开放能力和无障碍访问。其中详细讲解了`view`、`scroll-view`、`swiper`及`swiper-item`等组件的用途和示例。`view`用于构建页面布局,`scroll-view`支持滚动效果,`swiper`则用于创建轮播图。此外,还提到了`root-portal`、`page-container`等其他特殊用途的组件。
21 0
|
1月前
|
小程序
小程序和页面生命周期详解
小程序和页面生命周期详解
24 0
|
1月前
|
小程序 程序员
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
68 0
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的在线答题微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线答题微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
16 3
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园导航微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园导航微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
24 4