news 2026/7/22 11:59:23

HarmonyOS应用开发实战:萌宠日记 - 提醒事项增删改交互

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS应用开发实战:萌宠日记 - 提醒事项增删改交互

HarmonyOS应用开发实战:萌宠日记 - 提醒事项增删改交互

前言

增删改是提醒事项管理中最核心的CRUD 操作。在萌宠日记ReminderPage中,用户可以通过添加按钮创建新提醒,通过点击列表项编辑已有提醒,通过滑动删除移除不再需要的提醒。这些操作通过 @State 数据驱动 UI 自动更新。

本文将从萌宠日记中提醒事项增删改交互的实现出发,深入解析添加流程、编辑回填、删除确认,以及数据操作的 UI 反馈。

一、添加提醒

// 添加提醒 addReminder(item: ReminderItem): void { this.reminders = [item, ...this.reminders] } // 弹出添加面板 showAddDialog(): void { AlertDialog.show({ title: '添加提醒', primaryButton: { value: '取消', action: () => {} }, secondaryButton: { value: '确认', action: () => { this.addReminder({ icon: '🛡️', title: '驱虫', date: '2024.06.01', daysLeft: '还有30天', iconBg: '#FFF3E0' }) } } }) }

二、编辑提醒

// 点击列表项编辑 ListItem() { // 列表项内容 } .onClick(() => { this.showEditDialog(item) }) // 编辑对话框 showEditDialog(item: ReminderItem): void { AlertDialog.show({ title: `编辑${item.title}`, // 编辑表单 }) }

三、删除提醒

// 滑动删除 ListItem() { // 列表项内容 } .swipeAction({ end: { builder: () => { Button('删除') .backgroundColor('#F44336') .fontColor(Color.White) .onClick(() => { this.deleteReminder(index) }) } } }) // 删除逻辑 deleteReminder(index: number): void { this.reminders.splice(index, 1) }

四、总结

本文从萌宠日记提醒事项增删改交互实现出发,深入解析了 CRUD 操作的完整方案:

  1. 添加提醒:AlertDialog 输入 + 数据插入
  2. 编辑提醒:点击列表项弹出编辑框
  3. 删除提醒:滑动删除按钮

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • AlertDialog:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-methods-alert-dialog-box
  • swipeAction:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-listitem

7.1 属性对比

属性类型必填默认值说明
widthLength'100%'组件宽度
heightLength自适应组件高度
paddingPadding0内边距
marginMargin0外边距
backgroundColorColor透明背景颜色
borderRadiusLength0圆角半径
shadowShadow阴影效果

7.2 布局属性对比

布局方式适用场景主轴方向交叉轴对齐自动换行
Column垂直排列竖直alignItems不支持
Row水平排列水平alignItems不支持
Flex灵活布局可配置alignItems支持
Stack层叠布局alignContent不支持
Grid网格布局行列行列间距支持

7.3 状态管理装饰器对比

装饰器作用域数据流向默认值重绘触发
@State组件内单向支持赋值即触发
@Prop父→子单向支持父组件更新
@Link父子双向不支持双方更新
@Provide跨层级向下支持值变化时
@Consume跨层级向上不支持接收变化

5、常见问题与解决方案

5.1 布局问题

在实际开发中,开发者经常会遇到布局相关的常见问题:

  • 组件不显示:检查是否设置了正确的宽高,或父容器是否限制了子组件大小
  • 布局错乱:检查alignItemsjustifyContent设置是否正确
  • 滚动失效:确认 Scroll 组件的高度是否被正确限制

提示:布局问题通常可以通过borderWidth: 1临时添加边框来定位问题区域。

5.2 性能问题

  • 列表卡顿:使用 LazyForEach 替代 ForEach 实现懒加载
  • 频繁刷新:合理使用状态管理装饰器,避免不必要的组件重绘
  • 内存泄漏:在页面销毁时及时释放资源和取消订阅
// 懒加载示例 LazyForEach(this.dataSource, (item: DataItem) => { ListItem() { Text(item.name).fontSize(16) } }, (item: DataItem) => item.id.toString())

6、最佳实践建议

6.1 代码组织

良好的代码组织可以显著提升项目的可维护性:

  1. 组件化设计:将可复用的 UI 部分抽取为独立组件
  2. 样式分离:将常量和样式定义集中管理
  3. 类型安全:使用 interface 定义数据模型,避免 any 类型

6.2 性能优化

  1. 减少不必要的重绘:使用@State时只声明需要响应式更新的变量
  2. 合理使用布局:避免过深的嵌套层级
  3. 图片优化:使用适当的图片格式和尺寸

提示:HarmonyOS 提供了一系列性能分析工具,建议在开发过程中持续关注应用性能。

7、与其他方案的对比

7.1 方案对比

对比维度本方案传统方案优势
实现复杂度中等更简洁
维护成本更易维护
扩展性一般更灵活
性能优秀良好更高效

7.2 适用场景

  • 适合:需要快速实现相关功能的场景
  • 不适合:对性能有极致要求的场景(需考虑其他方案)

8、实际开发建议

8.1 工程化实践

在实际项目中,建议遵循以下工程化实践:

  1. 组件化设计:将可复用的 UI 部分抽取为独立组件,提高代码复用率
  2. 类型安全:使用 interface 定义数据模型,避免使用 any 类型
  3. 样式统一:将颜色、字体、间距等常量集中管理
// 类型定义示例 export interface DataModel {{ id: string name: string icon: string color: string }}

提示:良好的工程化实践可以显著提升项目的可维护性和团队协作效率。

8.2 性能优化建议

  • 减少组件嵌套:避免过深的布局层级,建议不超过 5 层
  • 合理使用状态管理:只在需要响应式更新的变量上使用 @State
  • 懒加载数据:使用 LazyForEach 替代 ForEach 处理大量数据
优化项优化前优化后提升效果
组件嵌套8 层4 层渲染速度提升 40%
状态管理全部 @State按需 @State内存减少 30%
数据加载全部加载懒加载首屏速度提升 60%

8.3 调试技巧

  1. 日志输出:使用hilog输出关键信息,便于定位问题
  2. 布局调试:临时添加borderWidth: 1查看组件边界
  3. 性能分析:使用 DevEco Studio 的 Profiler 工具分析性能瓶颈
// 日志输出示例 import {{ hilog }} from '@kit.PerformanceAnalysisKit' const DOMAIN = 0xFF00 const TAG = 'Demo' hilog.info(DOMAIN, TAG, '调试信息: %{{public}}s', JSON.stringify(data))

在开发过程中,建议持续使用调试工具定位和解决问题,而非等到最后统一排查。

总结

本文从萌宠日记的实际开发案例出发,深入解析了提醒事项增删改交互的实现方案。

通过本文的学习,读者可以掌握以下核心知识点:

  1. 组件用法:理解相关 ArkUI 组件的核心属性和使用场景
  2. 布局技巧:掌握常见的布局模式及其适用范围
  3. 交互实现:学习点击事件、状态管理等交互设计方案
  4. 最佳实践:了解实际项目中的工程化实践和性能考量

在实际开发中,建议根据具体业务需求灵活调整组件参数和布局结构,以达到最佳的用户体验效果。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • Text 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text
  • Column 容器:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-column
  • Row 容器:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row
  • Scroll 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-scroll
  • Tabs 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-tabs
  • Navigation 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigation
  • Grid 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-grid
  • List 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-list
  • TextInput 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textinput
  • TextArea 组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textarea

6.1 完整示例代码

以下是一个完整的实际应用示例,展示了相关组件的综合使用:

// 完整的组件使用示例 @Component export struct DemoComponent { @State message: string = 'Hello HarmonyOS' @State count: number = 0 build() { Column({ space: 16 }) { Text(this.message) .fontSize(24) .fontWeight(FontWeight.Bold) .fontColor('#333333') Text(`点击次数: ${this.count}`) .fontSize(16) .fontColor('#666666') Button('点击增加') .fontSize(16) .fontColor(Color.White) .backgroundColor('#F5A623') .borderRadius(20) .onClick(() => { this.count++ }) } .width('100%') .height('100%') .padding(24) .backgroundColor('#FFF8F0') } }

6.2 状态管理代码

// 状态管理示例 @State isActive: boolean = false @Prop title: string = '' @Link sharedValue: number build() { Column() { Text(this.title) .fontSize(18) .fontColor(this.isActive ? '#F5A623' : '#999999') Button(this.isActive ? '取消' : '激活') .onClick(() => { this.isActive = !this.isActive }) } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 11:57:33

智切未来:碳带分切机的AI进化论

在热转印打印技术深度渗透物流、医疗、零售与智能制造各个环节的今天,碳带作为信息承载的关键耗材,其品质直接决定了条码的可读性与追溯系统的可靠性。而碳带分切机,这一将宽幅母卷精准分割为成品窄带的工业母机,正悄然经历一场从…

作者头像 李华
网站建设 2026/7/22 11:57:16

零基础学用会议记录软件教程,避开新手常踩的坑

零基础学用会议记录软件可快速上手,按标准流程操作就能完成合格的会议记录整理,避开新手常见误区就能直接压缩整理耗时。适合零基础想解决会议整理效率瓶颈的效率工具爱好者、职场新人。关键依据是当前主流工具都做了零基础友好的轻量化交互,…

作者头像 李华
网站建设 2026/7/22 11:56:28

高效资料链接管理:系统设计与工具推荐

1. 资料链接汇总的价值与应用场景作为一个常年与各类资料打交道的从业者,我深刻体会到资料链接汇总的重要性。在日常工作和学习中,我们经常会遇到这样的情况:看到一个有用的链接随手收藏,但需要时却找不到;或者在不同设…

作者头像 李华
网站建设 2026/7/22 11:53:42

ChatGPT地区限制机制与国内AI办公替代方案

1. ChatGPT地区限制的底层机制解析当我们在浏览器地址栏输入chat.openai.com时,系统会通过多重验证机制判断访问者是否来自受支持地区。这个验证过程远比普通用户想象的复杂,主要涉及以下技术层面:1.1 IP地址的地理围栏技术OpenAI采用了MaxMi…

作者头像 李华
网站建设 2026/7/22 11:53:19

从零开始学前端 | 第三十五章:记账板筛选切换、统计卡片与组件通信

本章定位 上一章,我们已经把记账板第一版最关键的录入闭环打通了。 你已经真正做出了这些东西: 表单可以录入账单信息。提交前可以做基础校验。提交成功后可以新增一条记录。列表可以根据状态渲染出来。没有数据时会显示空状态提示。 也就是说&#xff0…

作者头像 李华