26.[HarmonyOS NEXT Column案例六(上)] 交互式任务列表:垂直列表与条件渲染的完美结合

简介: 在HarmonyOS NEXT应用开发中,任务列表是一种常见且实用的界面组件,它不仅需要清晰地展示任务信息,还需要提供便捷的操作功能。本教程将详细讲解如何使用Column和Row组件的嵌套组合,结合自定义组件和条件渲染,创建一个交互式任务列表。通过TaskList和TaskItem组件的实际案例,我们将展示如何构建层次分明、交互丰富的列表界面,帮助开发者掌握复杂布局和交互的实现技巧。


项目已开源,开源地址: https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial , 欢迎fork & star

效果演示


1. 引言

在HarmonyOS NEXT应用开发中,任务列表是一种常见且实用的界面组件,它不仅需要清晰地展示任务信息,还需要提供便捷的操作功能。本教程将详细讲解如何使用Column和Row组件的嵌套组合,结合自定义组件和条件渲染,创建一个交互式任务列表。通过TaskList和TaskItem组件的实际案例,我们将展示如何构建层次分明、交互丰富的列表界面,帮助开发者掌握复杂布局和交互的实现技巧。

2. 数据模型与组件结构

2.1 TaskList组件概述

@Component
export struct TaskList {
    private tasks: string[] = ['完成HarmonyOS布局开发', '整理代码示例', '测试多设备适配']
    build() {
        Column({ space: 16 }) // 外层Column控制列表间距
            {
            ForEach(this.tasks, (task:string) => {
                TaskItem({ task: task }) // 嵌套自定义TaskItem组件
            }, (task: string) => task)
        } .width('100%')
        .padding(24)
    }
}

TaskList组件是整个任务列表的容器,它负责:

  1. 定义任务数据模型
  2. 使用Column组件垂直排列任务项
  3. 通过ForEach循环渲染多个TaskItem组件

2.2 数据模型设计

private tasks: string[] = ['完成HarmonyOS布局开发', '整理代码示例', '测试多设备适配']

属性

类型

说明

tasks

string[]

任务列表数组,每个元素是一个任务的描述文本

在这个简化的示例中,我们使用字符串数组来存储任务信息。在实际应用中,任务数据模型通常会更加复杂,可能包含以下字段:

字段名

类型

说明

id

string

任务唯一标识符

title

string

任务标题

description

string

任务描述

dueDate

Date

截止日期

priority

number

优先级

completed

boolean

完成状态

2.3 组件层次结构

任务列表的组件层次结构如下:

  1. TaskList(外层容器)
  • Column(垂直排列)
  • ForEach循环
  • TaskItem(任务项组件)
  • Row(水平排列)
  • Column(任务内容,垂直排列)
  • Text(任务标题)
  • Text(任务日期)
  • Row(操作按钮,水平排列,条件渲染)
  • Button(编辑按钮)
  • Button(删除按钮)

这种层次结构使用了组件嵌套和组合的方式,将复杂的界面拆分为可管理的小组件,提高了代码的可维护性和复用性。

3. 外层Column布局设计

3.1 Column的基本结构

Column({ space: 16 }) // 外层Column控制列表间距
    {
    ForEach(this.tasks, (task:string) => {
        TaskItem({ task: task }) // 嵌套自定义TaskItem组件
    }, (task: string) => task)
} .width('100%')
.padding(24)

外层Column作为整个列表的容器,负责垂直排列所有的任务项。

3.2 Column属性详解

属性/参数

作用

space

16

设置子组件之间的垂直间距为16vp

width

100%

设置Column宽度占父容器的100%

padding

24

设置内边距为24vp,使列表与屏幕边缘保持适当距离

3.3 space属性的作用

Column({ space: 16 })

space属性用于设置Column子组件之间的垂直间距。在任务列表中,适当的间距可以:

  1. 提高列表的可读性,使各任务项之间有明确的视觉分隔
  2. 创造舒适的视觉节奏,避免界面过于拥挤
  3. 帮助用户更容易区分不同的任务项

3.4 width和padding的配合使用

.width('100%')
.padding(24)

这两个属性的配合使用确保了:

  1. 列表占据父容器的全部宽度
  2. 列表内容与屏幕边缘保持24vp的距离,提供适当的留白

这种设置在不同尺寸的设备上都能提供良好的视觉效果,是响应式设计的基本实践。

4. ForEach循环渲染

4.1 ForEach的基本用法

ForEach(this.tasks, (task:string) => {
    TaskItem({ task: task }) // 嵌套自定义TaskItem组件
}, (task: string) => task)

ForEach是ArkUI中用于循环渲染的重要机制,它接收三个参数:

参数

说明

第一个参数

要遍历的数组(this.tasks)

第二个参数

渲染函数,定义如何渲染每个数组元素

第三个参数

键生成函数,为每个渲染项生成唯一标识符

4.2 键生成函数的重要性

(task: string) => task

键生成函数返回每个任务项的唯一标识符,这在列表渲染中非常重要,因为:

  1. 它帮助框架识别哪些项发生了变化,从而进行高效的差异化更新
  2. 它确保在列表项添加、删除或重新排序时,UI能够正确更新
  3. 它避免了不必要的组件重新创建,提高了性能

在实际应用中,应该使用任务的唯一ID作为键,而不是任务描述文本。这里使用任务描述作为键只是为了简化示例。

4.3 自定义组件的传参

TaskItem({ task: task })

这行代码创建了一个TaskItem组件实例,并将当前任务文本作为参数传递给它。这种方式实现了:

  1. 数据从父组件(TaskList)到子组件(TaskItem)的传递
  2. 界面逻辑的分离,提高了代码的可维护性
  3. 组件的复用,同一个TaskItem组件可以渲染不同的任务数据

5. 总结与展望

在本教程的第一部分,我们详细讲解了任务列表的基础结构,包括:

  1. 数据模型的设计与初始化
  2. 外层Column的属性设置与作用
  3. ForEach循环渲染的使用方法与注意事项
  4. 组件嵌套与数据传递的基本原理

这些知识点是构建交互式列表的基础。在下一部分中,我们将深入探讨TaskItem组件的内部结构,包括Row布局的实现、条件渲染的使用以及交互事件的处理,帮助开发者掌握更复杂的布局和交互技巧。

目录
打赏
0
1
1
0
46
分享
相关文章
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
72 0
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
81 1
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
本文介绍在三层架构中实现模块依赖的步骤。首先在产品定制层(features)的oh-package.json5文件中导入共享包依赖,如"basic":"file:../../commons/basic"。然后在产品层(products)的配置文件中同时导入公共能力层和产品定制层的依赖,示例展示了如何添加"basic"和"my"两个依赖项。通过这些配置,三层架构的各模块之间建立了完整的依赖关系。
103 0
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
92 0
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:银行App
仓颉语言银行App项目分享,页面布局采用List容器,实现沉浸式体验与模块化设计。顶部资产模块结合Stack与Row布局,背景图与内容分离,代码清晰易懂;功能按钮部分通过负边距实现上移效果,圆角仅保留顶部;热门推荐使用header组件,结构更规范。整体代码风格与ArkTS相似,但细节更灵活,适合金融类应用开发。
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
101 0
鸿蒙开发:基于最新API,如何实现组件化运行
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问