自定义组件
小程序基础库版本从1.7.0
开始支持自定义组件功能,可通过 my.canIUse('component')
进行检测。开发者可以将需要复用的功能模块抽象成自定义组件,从而在不同页面中进行复用,更可以将自定义组件发布到npm
上,从而在不同的小程序中进行复用。
创建自定义组件
和页面一样,自定义组件也由4个部分组成:axml
、js
、json
、acss
。
- 开发者需要在 json 中设置
"component": true
,声明这是一个自定义组件。
示例:
// /components/customer/index.json
{
"component": true
}
- 开发者需要使用
Component
函数,注册自定义组件。 - didMount 为渲染后回调,didUpdate 为更新后回调,didUnmount 为删除后回调详见 组件生命周期
- data 为局部状态,同页面一样可以通过 setData 修改。详见 开发自定义组件-data
- props 为外部传过来的属性,可指定默认属性,后面不可修改.详见 开发自定义组件-props
- methods 为自定义方法。详见 开发自定义组件-methods
示例:
// /components/customer/index.js
Component({
mixins: [], // minxin 方便复用代码
data: { x: 1 }, // 组件内部数据
props: { y: 1 }, // 可给外部传入的属性添加默认值
didMount(){}, // 生命周期函数
didUpdate(){},
didUnmount(){},
methods: { // 自定义事件
handleTap() {
this.setData({ x: this.data.x + 1}); // 可使用 setData 改变内部属性
},
},
})
- 自定义组件支持 slot,使用其可以构建出灵活的页面结构。详见开发自定义组件-slot
示例:
<!-- // /components/customer/index.axml -->
<view>
<view>x: {{x}}</view>
<button onTap="handleTap">plusOne</button>
<slot>
<view>default slot & default value</view>
</slot>
</view>
使用自定义组件
使用自定义组件和使用基础组件类似。
- 开发者首先需要在页面 json 文件中指定使用的自定义组件。详见开发自定义组件-json
// /pages/index/index.json
{
"usingComponents": {
"customer": "/components/customer/index"
}
}
- 然后就像使用基础组件一样,在页面的 axml 中使用自定义组件。
<!-- /pages/index/index.axml -->
<view>
<customer />
</view>
原文: https://docs.alipay.com/mini/framework/custom-component-overview