鸿蒙应用入门级开发者认证实验三(循环渲染)
【摘要】 ForEach(this.simpleList,(item:string) => { ChildItem({'item':item} as Record<string,string>) }, (item:string)=>item) ForEach组件循环渲染列表数据:数据源 this.simpleList,类型为 Array<string>(字符串数组),表示待遍历的列表数据,例如:["A...
ForEach(this.simpleList,(item:string) => { ChildItem({'item':item} as Record<string,string>) }, (item:string)=>item)
ForEach组件循环渲染列表数据:
数据源 this.simpleList,类型为 Array<string>(字符串数组),表示待遍历的列表数据,例如:["A", "B", "C"]
(item: string) => {
ChildItem({'item': item} as Record<string, string>)
}
子项渲染函数为数组中的每个 item生成子组件
-
参数:
item是当前遍历的数组元素(字符串类型) -
组件创建:
ChildItem:自定义子组件名{'item': item}:向子组件传递名为item的属性,值为当前元素as Record<string, string>:类型断言,确保参数符合Record键值对格式
(item: string) => item
键值生成函数为每个子项生成唯一标识(Key),直接使用 item字符串作为 Key(需确保数组元素不重复),Key 用于高效更新/重渲染列表,鸿蒙依赖此标识进行差异对比
注意
-
Key 的唯一性
- 若
this.simpleList含重复值(如["A", "A", "B"]),需修改 Key 生成逻辑(例如追加索引):
(item: string, index?: number) => `${item}_${index}` - 若
-
类型安全
Record<string, string>确保传递给ChildItem的属性是键值对格式。若子组件定义了严格参数类型(如@Prop item: string),可简化为:ChildItem({ item: item }) -
性能优化
- 避免在渲染函数内执行复杂计算
- 超大列表建议搭配
LazyForEach
示例
@Entry
@Component
struct ParentComponent {
@State simpleList: string[] = ["Apple", "Banana", "Cherry"];
build() {
Column() {
ForEach(
this.simpleList,
(item: string) => {
ChildItem({ item: item }) // 简化的属性传递
},
(item: string) => item // Key 生成
)
}
}
}
@Component
struct ChildItem {
@Prop item: string; // 声明接收的属性
build() {
Text(this.item)
.fontSize(20)
.margin(5)
}
}
若
simpleList会被动态修改(增删改),必须使用@State装饰器触发UI更新。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者

评论(0)