前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HarmonyOS NEXT 实战系列05-案例回关粉丝

HarmonyOS NEXT 实战系列05-案例回关粉丝

原创
作者头像
用户8181473
修改于 2025-03-17 09:54:19
修改于 2025-03-17 09:54:19
400
举报

需求:

提取 FansItemComp 组件进行复用,使用 @Prop 接收数据保证组件UI可动态渲染

封装 getFansAndFollowCount 方法获取互关人数且渲染

传入 onChange 方法,当子组件状态发送变更通知父组件进行列表数据更新

代码:

代码语言:txt
AI代码解释
复制

interface FansItem {
  avatar: Resource
  name: string
  title: string
  isFollow: boolean
}
 
@Entry
@Component
struct TestPage {
  @State fansList: FansItem[] = [
    {
      name: '华为终端',
      avatar: $r('app.media.flower'),
      title: '2024,二百万粉阿华继续冲压!!!',
      isFollow: false
    },
    {
      name: '黑马程序员',
      avatar: $r('app.media.flower'),
      title: '领取课程源码+资料,关注黑马程序员公众,回复:领取资源02',
      isFollow: true
    },
    {
      name: '央视新闻',
      avatar: $r('app.media.flower'),
      title: '中央广播电视总台央视新闻官方账号',
      isFollow: false
    },
  ]
 
  getFansAndFollowCount() {
    return this.fansList.filter(item => item.isFollow)
      .length
  }
 
  build() {
    List() {
      ListItem() {
        Text(`互关 ${this.getFansAndFollowCount()} 人`)
          .height(40)
      }
 
      ForEach(this.fansList, (item: FansItem, i) => {
        ListItem() {
          FansItemComp({
            item,
            onChange: (newItem) => {
              this.fansList.splice(i, 1 , newItem)
            }
          })
        }
      }, (item: FansItem) => item.name)
    }
    .padding(15)
    .width('100%')
    .height('100%')
    .margin({ top: 50 })
  }
}
 
@Component
struct FansItemComp {
  @Prop @Require item: FansItem
  onChange: (item: FansItem) => void = () => {}
 
  build() {
    Row({ space: 15 }) {
      Image($r('app.media.flower'))
        .width(48)
        .aspectRatio(1)
        .borderRadius(24)
      Column() {
        Text(this.item.name)
        Text(this.item.title)
          .fontColor('#999999')
          .maxLines(1)
          .textOverflow({ overflow: TextOverflow.Ellipsis })
      }
      .layoutWeight(1)
      .alignItems(HorizontalAlign.Start)
 
      if (this.item.isFollow) {
        Button('已关注')
          .customButton()
          .backgroundColor('#acacac')
          .onClick(() => {
            this.item.isFollow = false
            this.onChange(this.item)
          })
      } else {
        Button('回关')
          .customButton()
          .backgroundColor('#ffaa00')
          .onClick(() => {
            this.item.isFollow = true
            this.onChange(this.item)
          })
      }
    }
    .width('100%')
    .height(80)
  }
}
 
@Extend(Button)
function customButton() {
  .fontSize(12)
  .padding(0)
  .size({ width: 60, height: 30 })
}

注意:

${变量名} 字符串模版语法

子组件也可以接收函数

ForEach 第3个参数是唯一标识(默认是对象转成字符串),保证标识不变该 Item 不重新渲染

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/zsgzsgzsgzsgzsg/article/details/146184981

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HarmonyOS NEXT 实战系列03-案例粉丝列表
ForEach(this.playerList, (item: FansItem) => {
用户8181473
2025/03/17
590
HarmonyOS NEXT 实战系列02-布局基础
ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。
用户8181473
2025/03/17
830
HarmonyOS——ArkUI状态管理
在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染,在ArkUI中统称为状态管理机制。
小帅聊鸿蒙
2024/07/04
3060
HarmonyOS——ArkUI状态管理
18 HarmonyOS NEXT UVList组件开发指南(五)
在开发UVList组件的过程中,我们遵循了以下设计原则,这些原则也适用于其他组件的开发:
全栈若城
2025/03/10
1160
108.[HarmonyOS NEXT 实战案例:聊天应用] 基础篇 - 垂直分割布局构建聊天界面
聊天应用是现代移动应用中最常见和最重要的应用类型之一。一个设计良好的聊天界面应该能够清晰地展示联系人列表和聊天内容,提供流畅的用户体验。本教程将详细讲解如何使用HarmonyOS NEXT的ColumnSplit组件构建一个聊天应用界面,通过垂直分割布局将界面分为联系人列表和聊天区域两个主要部分。
全栈若城
2025/06/09
630
HarmonyOS NEXT 实战系列-综合案例新闻页
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户8181473
2025/03/17
520
128.[HarmonyOS NEXT 实战案例三:SideBarContainer] 侧边栏容器实战:社交应用联系人列表 进阶篇
在基础篇中,我们学习了如何使用HarmonyOS NEXT的SideBarContainer组件创建社交应用的基本联系人侧边栏布局。本篇教程将深入探讨如何为社交应用添加更多交互功能和状态管理,提升用户体验。
全栈若城
2025/06/12
890
128.[HarmonyOS NEXT 实战案例三:SideBarContainer] 侧边栏容器实战:社交应用联系人列表 进阶篇
41.[HarmonyOS NEXT Row案例九] 打造流畅可滑动列表项:滑动操作按钮的高级实现
在现代移动应用中,可滑动列表项是一种常见且高效的交互方式,它允许用户通过水平滑动列表项来显示隐藏的操作按钮,如删除、置顶、归档等。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件结合手势和动画创建一个流畅的可滑动列表项,实现滑动操作按钮的高级交互效果。
全栈若城
2025/06/02
690
41.[HarmonyOS NEXT Row案例九] 打造流畅可滑动列表项:滑动操作按钮的高级实现
HarmonyOS开发学习(3)–页面开发
组件是界面搭建与显示的最小单位,组件根据功能可以分为以下五大类:基础组件、容器组件、媒体组件、绘制组件、画布组件。
摸鱼的G
2024/03/26
1.3K0
HarmonyOS开发学习(3)–页面开发
HarmonyOS NEXT 实战系列04-组件状态
自定义组件拥有变量,变量必须被装饰器装饰才可以成为状态变量,状态变量的改变会引起UI的渲染刷新。如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。 下图展示了State和View(UI)之间的关系。
用户8181473
2025/03/17
730
44.HarmonyOS NEXT Layout布局组件系统详解(十一):最佳实践与高级应用
在前一篇文章中,我们介绍了HarmonyOS Layout布局组件系统的基本应用案例,包括三段式布局、仪表盘布局和表单布局等。本文将继续深入探讨更多高级应用场景和最佳实践,帮助开发者创建既美观又高效的用户界面。
全栈若城
2025/03/12
1530
134.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解(五):实战应用
全栈若城
2025/03/18
900
104. [HarmonyOS NEXT 实战案例:新闻阅读应用] 进阶篇 - 交互功能与状态管理
在基础篇中,我们学习了如何使用HarmonyOS NEXT的RowSplit组件构建新闻阅读应用的基本布局。在本篇教程中,我们将进一步探讨如何为新闻阅读应用添加交互功能和状态管理,包括新闻分类切换、新闻搜索、新闻收藏、新闻详情查看等功能,使界面更加动态和交互友好。
全栈若城
2025/06/09
720
64.[HarmonyOS NEXT 实战案例六] 餐饮菜单网格布局(下)
在上一篇教程中,我们学习了如何使用GridRow和GridCol组件实现基本的餐饮菜单网格布局。本篇教程将在此基础上,深入探讨如何优化布局、添加交互功能,以及实现更多高级特性,打造一个功能完善的餐饮菜单应用。
全栈若城
2025/06/06
680
【HarmonyOS开发】ArkUI中的自定义弹窗
自定义弹窗的使用更加灵活,适用于更多的业务场景,在自定义弹窗中您可以自定义弹窗内容,构建更加丰富的弹窗界面。自定义弹窗的界面可以通过装饰器@CustomDialog 定义的组件来实现,然后结合 CustomDialogController 来控制自定义弹窗的显示和隐藏。
小帅聊鸿蒙
2024/07/05
5940
【HarmonyOS开发】ArkUI中的自定义弹窗
【HarmonyOS Next】鸿蒙状态管理V2装饰器详解
首先我们需要了解什么是状态管理?在鸿蒙应用开发中,状态管理指的是,管理数据变化去刷新UI的整个过程。
GeorgeGcs
2025/03/24
2670
104.HarmonyOS NEXT跑马灯组件教程:实际应用场景与最佳实践
跑马灯组件是HarmonyOS NEXT中一个非常实用的UI组件,它可以在有限的空间内展示超出显示区域的文本内容。本文将详细介绍跑马灯组件的实际应用场景和最佳实践,帮助开发者更好地理解如何在实际项目中使用跑马灯组件。
全栈若城
2025/03/17
1470
129. [HarmonyOS NEXT 实战案例四:SideBarContainer] 侧边栏容器实战:音乐播放器侧边栏 - 播放列表与歌单管理 基础篇
在现代音乐播放器应用中,侧边栏是展示播放列表和歌单的重要界面元素。通过HarmonyOS NEXT的SideBarContainer组件,我们可以轻松实现一个功能完善的音乐播放器侧边栏,为用户提供流畅的音乐浏览和播放体验。
全栈若城
2025/06/12
500
129. [HarmonyOS NEXT 实战案例四:SideBarContainer] 侧边栏容器实战:音乐播放器侧边栏 - 播放列表与歌单管理 基础篇
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
在基础篇中,我们学习了如何使用HarmonyOS NEXT的SideBarContainer组件创建新闻阅读应用的基本侧边栏布局。本篇教程将深入探讨如何为新闻阅读应用添加更多交互功能和状态管理,提升用户体验。
全栈若城
2025/06/12
790
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
鸿蒙(HarmonyOS)性能优化实战-状态管理
为了帮助应用程序开发人员提高其应用程序质量,特别是在高效的状态管理方面。本章节面向开发者提供了多个在开发ArkUI应用中常见的低效开发的场景,并给出了对应的解决方案。此外,还提供了同一场景下,推荐用法和不推荐用法的对比和解释说明,更直观地展示两者区别,从而帮助开发者学习如何正确地在应用开发中使用状态变量,进行高性能开发。
小帅聊鸿蒙
2024/10/19
1770
鸿蒙(HarmonyOS)性能优化实战-状态管理
推荐阅读
HarmonyOS NEXT 实战系列03-案例粉丝列表
590
HarmonyOS NEXT 实战系列02-布局基础
830
HarmonyOS——ArkUI状态管理
3060
18 HarmonyOS NEXT UVList组件开发指南(五)
1160
108.[HarmonyOS NEXT 实战案例:聊天应用] 基础篇 - 垂直分割布局构建聊天界面
630
HarmonyOS NEXT 实战系列-综合案例新闻页
520
128.[HarmonyOS NEXT 实战案例三:SideBarContainer] 侧边栏容器实战:社交应用联系人列表 进阶篇
890
41.[HarmonyOS NEXT Row案例九] 打造流畅可滑动列表项:滑动操作按钮的高级实现
690
HarmonyOS开发学习(3)–页面开发
1.3K0
HarmonyOS NEXT 实战系列04-组件状态
730
44.HarmonyOS NEXT Layout布局组件系统详解(十一):最佳实践与高级应用
1530
134.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解(五):实战应用
900
104. [HarmonyOS NEXT 实战案例:新闻阅读应用] 进阶篇 - 交互功能与状态管理
720
64.[HarmonyOS NEXT 实战案例六] 餐饮菜单网格布局(下)
680
【HarmonyOS开发】ArkUI中的自定义弹窗
5940
【HarmonyOS Next】鸿蒙状态管理V2装饰器详解
2670
104.HarmonyOS NEXT跑马灯组件教程:实际应用场景与最佳实践
1470
129. [HarmonyOS NEXT 实战案例四:SideBarContainer] 侧边栏容器实战:音乐播放器侧边栏 - 播放列表与歌单管理 基础篇
500
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
790
鸿蒙(HarmonyOS)性能优化实战-状态管理
1770
相关推荐
HarmonyOS NEXT 实战系列03-案例粉丝列表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档