HarmonyOS 小游戏《对战五子棋》开发第34篇 - ArkTS中复用UI的方法

发布时间:2026/7/12 6:04:01

HarmonyOS 小游戏《对战五子棋》开发第34篇 - ArkTS中复用UI的方法
把重复的UI代码提取成方法——Builder是ArkUI的组件函数什么是BuilderBuilder是ArkTS的装饰器用于定义可复用的UI构建方法。它类似于轻量级组件——不需要声明struct但可以包含完整的UI代码。本项目的Builder使用AIBattlePage使用了4个Builder方法BuilderlevelSelectView(){/* 关卡选择视图 */}BuilderlevelCard(item:LevelConfig){/* 关卡卡片 */}BuildergameView(){/* 游戏对战视图 */}BuilderresultDialog(){/* 结果弹窗 */}Builder的调用build(){Stack(){Column(){// 导航栏...if(this.inGame){this.gameView()// 调用Builder方法}else{this.levelSelectView()// 调用Builder方法}}if(this.inGamethis.showResultDialog){this.resultDialog()// 调用Builder方法}}}Builder方法可以用this.xxx()在build()中调用就像普通方法一样。Builder vs 自定义组件特性BuilderComponent struct声明方式方法struct参数传递方法参数Prop/Link状态管理共享宿主组件状态独立状态复用性仅限当前组件跨文件复用适合场景组件内UI拆分独立可复用组件为什么AIBattlePage用BuilderAIBattlePage有两个主要视图选关、游戏和一个弹窗如果全部写在build()中会非常冗长。用Builder拆分后build(){Stack(){Column(){// 导航栏共用Row(){...}// 根据状态选择视图if(this.inGame){this.gameView()// 100行UI代码被封装}else{this.levelSelectView()// 50行UI代码被封装}}if(this.inGamethis.showResultDialog){this.resultDialog()// 80行UI代码被封装}}}build()方法变得简洁清晰。Builder方法内部访问状态BuildergameView(){Column(){// 直接访问宿主组件的StateText(this.getStatusText())if(this.aiThinking){LoadingProgress()}ChessBoardView({boardData:this.boardData,onCellClick:(row:number,col:number){this.onCellClick(row,col);}})}}Builder方法可以直接访问宿主组件的所有成员变量和方法——不需要参数传递。Builder带参数BuilderlevelCard(item:LevelConfig){Button(){Row({space:16}){Text(item.icon).backgroundColor(item.color)Column(){Text(第${item.level}关)Text(item.name)Text(item.desc)}}}.enabled(item.levelthis.unlockedLevel)// 仍可访问宿主状态}参数item是LevelConfig类型在ForEach中传入ForEach(this.levels,(item:LevelConfig){this.levelCard(item)// 传参调用},(item:LevelConfig)item.level.toString())Builder的嵌套调用BuilderlevelSelectView(){Column({space:16}){Text(选择关卡)ForEach(this.levels,(item:LevelConfig){this.levelCard(item)// Builder调用Builder},(item:LevelConfig)item.level.toString())}}Builder方法可以调用其他Builder方法——形成UI的模块化组合。ChessBoardView为什么不用BuilderChessBoardView是独立组件Component export struct不是Builder——因为它需要跨文件复用被TwoPlayerPage和AIBattlePage共用。选择原则仅在当前组件内使用的UI片段 → Builder需要跨组件/跨文件复用 → Component struct总结Builder是ArkUI中组织UI代码的重要工具代码拆分将冗长的build()方法分解为逻辑单元状态共享直接访问宿主组件的状态参数传递支持方法参数嵌套调用Builder可以调用Builder适用场景组件内的UI复用不需要跨文件合理使用Builder可以让复杂的UI代码保持清晰和可维护。

相关新闻

UEFI BIOS 安全配置实战:启用 Secure Boot 与 TPM 2.0 的 3 个关键步骤

UEFI BIOS 安全配置实战:启用 Secure Boot 与 TPM 2.0 的 3 个关键步骤

2026/7/12 6:04:01

UEFI BIOS 安全配置实战:从 Secure Boot 到 TPM 2.0 的完整加固指南当你的电脑在深夜自动下载可疑更新时,当陌生USB设备插入后系统突然卡顿时,这些都可能是不安全固件设置埋下的隐患。现代计算机的BIOS/UEFI界面早已不再是简单的启动顺序调节…

DiffSinger终极指南:三步打造你的专属AI歌声合成系统

DiffSinger终极指南:三步打造你的专属AI歌声合成系统

2026/7/12 6:04:01

DiffSinger终极指南:三步打造你的专属AI歌声合成系统 【免费下载链接】DiffSinger An advanced singing voice synthesis system with high fidelity, expressiveness, controllability and flexibility based on DiffSinger: Singing Voice Synthesis via Shallow …

【C++基础】面试题——Day4

【C++基础】面试题——Day4

2026/7/12 5:54:01

大家好,我是Halcyon.平安 欢迎文末添加好友交流,共同进步! 目录C 中 struct 和 class 的区别?C 中 struct 和 union 的区别?如何使用 union 做优化?C 中 using 和 typedef 的区别?C 中 enum 和 enum class 的区别?C 中 new 和…

空洞骑士模组管理器Scarab:让每个玩家都能轻松享受模组乐趣的3大核心功能

空洞骑士模组管理器Scarab:让每个玩家都能轻松享受模组乐趣的3大核心功能

2026/7/12 7:44:24

空洞骑士模组管理器Scarab:让每个玩家都能轻松享受模组乐趣的3大核心功能 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经因为复杂的模组安装流程而放…

操作系统内存管理 3 种分配算法对比:FF/BF/WF 性能实测与适用场景

操作系统内存管理 3 种分配算法对比:FF/BF/WF 性能实测与适用场景

2026/7/12 7:44:24

操作系统内存管理三大分配算法实战评测:FF/BF/WF 性能差异与工程选型指南当你在Linux终端敲下free -h命令时,那些闪烁的数字背后隐藏着一场精密的资源调配博弈。内存作为进程运行的舞台,其分配效率直接影响着整个系统的性能表现。本文将带你穿…

Spark RDD 与 DataFrame 性能对比:10 亿条数据下 3 种算子执行效率实测

Spark RDD 与 DataFrame 性能对比:10 亿条数据下 3 种算子执行效率实测

2026/7/12 7:44:24

Spark RDD 与 DataFrame 性能深度对比:十亿级数据处理实战解析1. 大数据处理的技术演进与核心挑战在当今数据爆炸式增长的时代,处理十亿级甚至更大规模的数据集已成为企业数据分析的常态。Apache Spark作为目前最流行的大数据处理框架之一,其…

上下线管理:沙箱→灰度→全量的科学上线策略

上下线管理:沙箱→灰度→全量的科学上线策略

2026/7/12 7:44:24

🚦 ARM模块五 上下线管理。 引言:让员工"安全入职",也让员工"体面离职" 在真人员工管理中,入职有试用期、离职有交接流程。这是为了保护企业和员工双方的利益——试用期让企业考察员工是否胜任&#xff0…

HDFS/MapReduce 编程避坑 3 要点:从 WordCount 到大数据项目实战

HDFS/MapReduce 编程避坑 3 要点:从 WordCount 到大数据项目实战

2026/7/12 7:44:24

HDFS/MapReduce 编程避坑 3 要点:从 WordCount 到大数据项目实战在《大数据技术》课程中,HDFS 读写和 MapReduce WordCount 编程是每个学习者必经的入门关卡。然而,从课堂练习到真实项目落地,中间往往横亘着无数隐形的技术陷阱。本…

C++版本兼容序列化库:模板元编程与变长编码实现

C++版本兼容序列化库:模板元编程与变长编码实现

2026/7/12 7:34:23

1. 项目概述:为什么我们需要一个“版本兼容”的序列化库?如果你在C项目中处理过数据持久化、网络通信或者进程间数据交换,那么“序列化”这个词对你来说一定不陌生。简单来说,序列化就是把内存中的对象转换成可以存储或传输的字节…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…