1# Repeat 2 3Repeat组件不开启virtualScroll开关时,Repeat基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在Repeat父容器组件中的子组件。Repeat循环渲染和ForEach相比有两个区别,一是优化了部分更新场景下的渲染性能,二是组件生成函数的索引index由框架侧来维护。 4 5Repeat组件开启virtualScroll开关时,Repeat将从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了Repeat,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会缓存组件,并在下一次迭代中使用。 6 7>**说明:** 8> 9> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 10> 11> 当前状态管理(V2试用版)仍在逐步开发中,相关功能尚未成熟,建议开发者尝鲜试用。 12 13**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 14 15**系统能力:** SystemCapability.ArkUI.ArkUI.Full 16 17**参数:** 18 19| 参数名 | 类型 | 必填 | 说明 | 20| ------ | ---------- | -------- | -------- | 21| arr | Array\<T\> | 是 | 数据源,为`Array<T>`类型的数组,由开发者决定数据类型。 | 22 23**返回值:** 24 25| 类型 | 说明 | 26| --- | --- | 27| [RepeatAttribute](#repeatattribute)\<T\> | Repeat组件属性 | 28 29## RepeatAttribute 30 31### each 32 33each(itemGenerator: (repeatItem: RepeatItem\<T\>) => void): RepeatAttribute\<T\> 34 35组件生成函数。template和templateId匹配不上的数据项走默认生成函数each。 36 37**说明:** 38 39- `each`属性必须有,否则运行时会报错。 40- `itemGenerator`的参数为`RepeatItem`,该参数将`item`和`index`结合到了一起,请勿将`RepeatItem`参数拆开使用。 41 42**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 43 44**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 45 46**系统能力:** SystemCapability.ArkUI.ArkUI.Full 47 48**参数:** 49 50| 参数名 | 类型 | 必填 | 说明 | 51| ------ | ---------- | -------- | -------- | 52| repeatItem | [RepeatItem](#repeatitem)\<T\> | 是 | repeat数据项 | 53 54### key 55 56key(keyGenerator: (item: T, index: number) => string): RepeatAttribute\<T\> 57 58键值生成函数。 59 60**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 61 62**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 63 64**系统能力:** SystemCapability.ArkUI.ArkUI.Full 65 66**参数:** 67 68| 参数名 | 类型 | 必填 | 说明 | 69| ------ | ---------- | -------- | -------- | 70| item | T | 是 | `arr`数组中的数据项 | 71| index | number | 是 | `arr`数组中的数据项索引 | 72 73### virtualScroll 74 75virtualScroll(virtualScrollOptions?: VirtualScrollOptions): RepeatAttribute\<T\> 76 77`Repeat`开启虚拟滚动。 78 79**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 80 81**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 82 83**系统能力:** SystemCapability.ArkUI.ArkUI.Full 84 85**参数:** 86 87| 参数名 | 类型 | 必填 | 说明 | 88| ------ | ---------- | -------- | -------- | 89| virtualScrollOptions | [VirtualScrollOptions](#virtualscrolloptions) | 否 | 虚拟滚动配置项 | 90 91### template 92 93template(type: string, itemBuilder: RepeatItemBuilder\<T\>, templateOptions?: TemplateOptions): RepeatAttribute\<T\> 94 95复用模板。 96 97**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 98 99**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 100 101**系统能力:** SystemCapability.ArkUI.ArkUI.Full 102 103**参数:** 104 105| 参数名 | 类型 | 必填 | 说明 | 106| ------ | ---------- | -------- | -------- | 107| type | string | 是 | 当前模板类型 | 108| itemBuilder | [RepeatItemBuilder](#repeatitembuilder)\<T\> | 是 | 组件生成函数 | 109| templateOptions | [TemplateOptions](#templateoptions) | 否 | 当前模板配置项 | 110 111### templateId 112 113templateId(typedFunc: TemplateTypedFunc\<T\>): RepeatAttribute\<T\> 114 115为当前数据项分配templateId。 116 117**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 118 119**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 120 121**系统能力:** SystemCapability.ArkUI.ArkUI.Full 122 123**参数:** 124 125| 参数名 | 类型 | 必填 | 说明 | 126| ------ | ---------- | -------- | -------- | 127| typedFunc | [TemplateTypedFunc](#templatetypedfunc)\<T\> | 是 | 生成当前数据项对应的templateId | 128 129## RepeatItem 130 131**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 132 133**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 134 135**系统能力:** SystemCapability.ArkUI.ArkUI.Full 136 137**参数:** 138 139| 参数名 | 类型 | 必填 | 说明 | 140| ------ | ------ | ---- | -------------------------------------------- | 141| item | T | 是 | arr中每一个数据项。T为开发者传入的数据类型。 | 142| index | number | 是 | 当前数据项对应的索引。 | 143 144## VirtualScrollOptions 145 146**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 147 148**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 149 150**系统能力:** SystemCapability.ArkUI.ArkUI.Full 151 152**参数:** 153 154| 参数名 | 类型 | 必填 | 说明 | 155| ---------- | ------ | ---- | ------------------------------------------------------------ | 156| totalCount | number | 否 | 数据源的总长度,可以大于已加载数据项的数量 | 157 158## RepeatItemBuilder 159 160type RepeatItemBuilder\<T\> = (repeatItem: RepeatItem\<T\>) => void 161 162**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 163 164**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 165 166**系统能力:** SystemCapability.ArkUI.ArkUI.Full 167 168**参数:** 169 170| 参数名 | 类型 | 必填 | 说明 | 171| ---------- | ------------- | --------------------------------------- | --------------------------------------- | 172| repeatItem | [RepeatItem](#repeatitem)\<T\> | 是 | 将item和index结合到一起的一个状态变量。 | 173 174## TemplateOptions 175 176**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 177 178**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 179 180**系统能力:** SystemCapability.ArkUI.ArkUI.Full 181 182**参数:** 183 184| 参数名 | 类型 | 必填 | 说明 | 185| ----------- | ------ | ---- | ------------------------------------------------------------ | 186| cachedCount | number | 否 | 当前模板在Repeat的缓存池中可缓存子节点的最大数量,仅在开启virtualScroll后生效。 | 187 188## TemplateTypedFunc 189 190type TemplateTypedFunc\<T\> = (item : T, index : number) => string 191 192**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 193 194**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 195 196**系统能力:** SystemCapability.ArkUI.ArkUI.Full 197 198**参数:** 199 200| 参数名 | 类型 | 必填 | 说明 | 201| ------ | ------ | ---- | -------------------------------------------- | 202| item | T | 是 | arr中每一个数据项。T为开发者传入的数据类型。 | 203| index | number | 是 | 当前数据项对应的索引。 |