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 | 是   | 当前数据项对应的索引。                       |