小程序组件化开发_小程序组件开发

前言

随着小程序的普及,越来越多的开发者开始使用小程序进行开发,而小程序的组件化开发已经成为了一种标配的开发模式。本文将深入介绍小程序组件化开发的相关知识,包括组件的定义、生命周期、通信和使用等方面,帮助大家更好地理解和使用小程序的组件化开发模式。

组件的定义

组件是小程序中的一个重要概念,它能够将页面分解成独立的、可复用的部分,以便于开发和维护,组件可以包含一些特定的功能和样式,同时也能够接受外部的数据和事件。

在小程序中,组件是通过Component构造函数来定义的。一个组件通常由三个部分组成:propertiesdatamethods。其中,properties用于定义组件的对外接口,data用于定义组件的内部数据,methods用于定义组件的方法。示例代码如下:

Component({
  properties: {
    // 定义组件的属性
    title: {
      type: String,
      value: '默认标题'
    }
  },
  data: {
    // 定义组件的内部数据
    count: 0
  },
  methods: {
    // 定义组件的方法
    handleClick() {
      this.setData({
        count: this.data.count + 1
      })
      this.triggerEvent('click', { count: this.data.count })
    }
  }
})

定义了一个名为my-component的组件,它包含一个title属性、一个count数据和一个handleClick方法。其中,properties中定义了title属性的类型为String,默认值为默认标题;data中定义了count初始值为0;methods中定义了handleClick方法,可以修改count,并触发click事件。triggerEvent方法用于触发组件的自定义事件。

组件的生命周期

组件的生命周期是指组件从创建到销毁的整个过程,包括组件的创建、更新和销毁等阶段,小程序提供了一些钩子函数,用于在不同的生命周期阶段执行一些特定的操作。以下是小程序组件的生命周期及其钩子函数:

created:组件实例刚刚被创建时触发,此时组件的属性和方法还未初始化;

attached:组件被添加到页面节点树时触发,此时组件的属性和方法已经初始化;

ready:组件渲染完成时触发,此时组件已经可以和用户进行交互;

moved:组件被移动到另一个节点时触发;

detached:组件被从页面节点树移除时触发。
示例代码如下:

Component({
  created() {
    console.log('组件实例被创建')
  },
  attached() {
    console.log('组件被添加到页面节点树')
  },
  ready() {
    console.log('组件渲染完成')
  },
  moved() {
    console.log('组件被移动到另一个节点')
  },
  detached() {
    console.log('组件被从页面节点树移除')
  }
})

当然除了这些,小程序组件还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义。其中可用的生命周期包括以下几种:
在这里插入图片描述
注意:自定义 tabBar 的 pageLifetime 不会触发。

Component({
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

组件的通信

组件之间的通信是小程序开发中的一个重要问题,它涉及到组件之间的数据传递和事件触发等方面

事件传递

小程序中可以通过事件传递实现组件之间的通信。事件传递是指一个组件向其父组件或子组件发送事件,另一个组件则监听该事件并进行相应的处理。在事件触发时,可以将数据作为参数传递给另一个组件。通过这种方式,组件之间可以实现数据的传递和处理。小程序官方提供了一些事件传递的示例代码,如下所示:

// 子组件向父组件传递事件
// 子组件中定义事件
Component({
  methods: {
    onTap: function () {
      this.triggerEvent('myevent', {data: 'hello'}, {})
    }
  }
})
// 父组件中监听子组件事件
<child-component myevent="{{myevent}}"/>
// 父组件中定义事件处理函数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
  }
})
// 父组件中监听子组件事件
<child-component bind:myevent="handleEvent"/>
// 父组件中定义事件处理函数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
  }
})
// 父组件中监听子组件事件,并传递额外的参数
<child-component bind:myevent="handleEvent" data-extra="extra"/>
// 父组件中定义事件处理函数,获取额外的参数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
    console.log(e.currentTarget.dataset.extra) // 输出 extra
  }
})

共享数据

小程序中可以使用 getApp() 方法获取 App 实例,从而在不同的页面和组件之间共享数据。具体的做法是在 App 实例中定义一个全局的数据对象,在需要访问这个数据对象的页面和组件中使用 getApp() 方法获取 App 实例,并通过 this.globalData 访问全局数据对象。共享数据的示例如下所示:

// app.js 中定义全局数据对象


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/47dd6ea3ea650ecbf2e0ea5f4fc916c5.png)
![img](https://img-blog.csdnimg.cn/img_convert/e863d45078f11a78108208e27a189f05.png)
![img](https://img-blog.csdnimg.cn/img_convert/27ebb7818f6017cadb7ae11d314571e4.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
![img](https://img-blog.csdnimg.cn/img_convert/890c39c0190d5e82029a84b714082a37.png)

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

视频,并且会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
[外链图片转存中...(img-PWeSr451-1712897102407)]

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值