> 技术文档 > 鸿蒙API14开发【Repeat】ArkTS组件_鸿蒙开发 组件repeat idatasource

鸿蒙API14开发【Repeat】ArkTS组件_鸿蒙开发 组件repeat idatasource


接口

Repeat: (arr: Array)

Repeat组件non-virtualScroll场景(不开启virtualScroll开关)中,Repeat基于数据源进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在Repeat父容器组件中的子组件。Repeat循环渲染和ForEach相比有两个区别,一是优化了部分更新场景下的渲染性能,二是组件生成函数的索引index由框架侧来维护。

Repeat组件virtualScroll场景中,Repeat将从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件,必须与滚动类容器组件配合使用。当在滚动类容器组件中使用了Repeat,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会缓存组件,并在下一次迭代中使用。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 arr Array 是 数据源,为Array类型的数组,由开发者决定数据类型。

示例:

// arr是Array类型的数组,以arr为数据源创建Repeat组件Repeat(this.arr)ts

事件

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

each

each(itemGenerator: (repeatItem: RepeatItem) => void): RepeatAttribute

组件生成函数。template和templateId匹配不上的数据项走默认生成函数each。

说明

each属性必须有,否则运行时会报错。 itemGenerator的参数为RepeatItem,该参数将itemindex结合到了一起,请勿将RepeatItem参数拆开使用。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 repeatItem [RepeatItem] 是 repeat数据项。

示例:

// arr是Array类型的数组,为每个数据创建一个Text组件Repeat(this.arr) .each((obj: RepeatItem) => { Text(obj.item) })ts

key

key(keyGenerator: (item: T, index: number) => string): RepeatAttribute

键值生成函数。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 item T 是 arr数组中的数据项。 index number 是 arr数组中的数据项索引。

示例:

// arr是Array类型的数组,为每个数据创建一个Text组件// 并将字符串的值作为其键值Repeat(this.arr) .each((obj: RepeatItem) => { Text(obj.item) }) .key((obj: string) => obj)ts

virtualScroll

virtualScroll(virtualScrollOptions?: VirtualScrollOptions): RepeatAttribute

Repeat开启虚拟滚动。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 virtualScrollOptions [VirtualScrollOptions] 否 虚拟滚动配置项。

示例:

// arr是Array类型的数组,为每个数据创建一个Text组件// 在List容器组件中使用Repeat,并打开virtualScrollList() { Repeat(this.arr) .each((obj: RepeatItem) => { ListItem() { Text(obj.item) }}) .virtualScroll()}ts

template

template(type: string, itemBuilder: RepeatItemBuilder, templateOptions?: TemplateOptions): RepeatAttribute

复用模板。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 type string 是 当前模板类型。 itemBuilder [RepeatItemBuilder] 是 组件生成函数。 templateOptions [TemplateOptions] 否 当前模板配置项。

示例:

// arr是Array类型的数组// 在List容器组件中使用Repeat,并打开virtualScroll// 创建模板temp,该模板为数据创建Text组件List() { Repeat(this.arr) .each((obj: RepeatItem) => {}) .virtualScroll() .template(\'temp\', (obj: RepeatItem) => { ListItem() { Text(obj.item) }})}ts

templateId

templateId(typedFunc: TemplateTypedFunc): RepeatAttribute

为当前数据项分配templateId。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 typedFunc [TemplateTypedFunc] 是 生成当前数据项对应的templateId。

示例:

// arr是Array类型的数组// 在List容器组件中使用Repeat,并打开virtualScroll// 创建模板temp,该模板为数据创建Text组件// 所有数据项都使用temp模板List() { Repeat(this.arr) .each((obj: RepeatItem) => {}) .virtualScroll() .template(\'temp\', (obj: RepeatItem) => { ListItem() { Text(obj.item) }}) .templateId((item: string, index: number) => { return \'temp\' })}ts

RepeatItem

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 必填 说明 item T 是 arr中每一个数据项。T为开发者传入的数据类型。 index number 是 当前数据项对应的索引。

VirtualScrollOptions对象说明

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 必填 说明 totalCount number 否 加载的数据项总数,可以大于/小于数据源长度

示例:

// arr是Array类型的数组,在List容器组件中使用Repeat,并打开virtualScroll// 将加载的数据项总数设为数据源的长度List() { Repeat(this.arr) .each((obj: RepeatItem) => { ListItem() { Text(obj.item) }}) .virtualScroll( { totalCount: this.arr.length } )}ts

RepeatItemBuilder

type RepeatItemBuilder = (repeatItem: RepeatItem) => void

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 repeatItem [RepeatItem] 是 将item和index结合到一起的一个状态变量。

TemplateOptions对象说明

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 必填 说明 cachedCount number 否 当前模板在Repeat的缓存池中可缓存子节点的最大数量,仅在开启virtualScroll后生效。

示例:

// arr是Array类型的数组,在List容器组件中使用Repeat,并打开virtualScroll// 创建模板temp,该模板为数据创建Text组件,所有数据项都使用temp模板// 将temp模板的最大缓存节点数量设为2List() { Repeat(this.arr) .each((obj: RepeatItem) => {}) .virtualScroll() .template(\'temp\', (obj: RepeatItem) => { ListItem() { Text(obj.item) }}, { cachedCount: 2 }) .templateId((item: string, index: number) => { return \'temp\' })}ts

TemplateTypedFunc

type TemplateTypedFunc = (item : T, index : number) => string

原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明 item T 是 arr中每一个数据项。T为开发者传入的数据类型。 index number 是 当前数据项对应的索引。

更多鸿蒙开发内容:

在这里插入图片描述

尽在↓