鸿蒙 ArkTS 实战:毛巾挂钩容量的状态建模、算法与交互实现

前言

毛巾挂钩容量用于按毛巾和浴袍占位判断挂钩数量是否足够。
项目通过 ArkTSArkUI@State 管理 hooks、towels、robes。
核心是 双倍占位、容量比较和分开晾晒提示,默认数据为6 个挂钩、4 毛巾、1 浴袍。
页面展示已用位置和容量状态。
在这里插入图片描述
图 1:DevEco Studio 中的 ArkTS 开发环境。

页面结果应能从当前状态完整复算。
边界条件需要落到真实代码路径。
浴袍按双倍位置计算。
本文只讨论源码已实现能力。

一、业务对象

1.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑业务对象。
浴袍按双倍位置计算。

1.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

1.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

1.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

业务对象维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

二、状态字段

2.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑状态字段。
总占用实时派生。

2.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

2.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

2.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

三、核心规则

3.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑核心规则。
超过 hooks 提示分开晾晒。

3.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

3.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

3.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

四、输入控件

4.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑输入控件。
浴袍按双倍位置计算。

4.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

4.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

4.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

输入控件维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

五、事件回调

5.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑事件回调。
总占用实时派生。

5.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

5.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

5.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

六、边界保护

6.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑边界保护。
超过 hooks 提示分开晾晒。

6.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

6.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

6.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  • 毛巾挂钩容量保存真实状态。
  • used参与核心逻辑。
  • 已用位置和容量状态形成反馈。
  • 双倍占位、容量比较和分开晾晒提示保护输出。

七、状态反馈

7.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑状态反馈。
浴袍按双倍位置计算。

7.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

7.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

7.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

八、默认运行

8.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑默认运行。
总占用实时派生。

8.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

8.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

8.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

默认运行维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

九、连续迁移

9.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑连续迁移。
超过 hooks 提示分开晾晒。

9.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

9.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

9.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

十、数组或数值更新

10.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑数组或数值更新。
浴袍按双倍位置计算。

10.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

10.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

10.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

十一、声明式刷新

11.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑声明式刷新。
总占用实时派生。

11.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

11.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

11.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  • 毛巾挂钩容量保存真实状态。
  • used参与核心逻辑。
  • 已用位置和容量状态形成反馈。
  • 双倍占位、容量比较和分开晾晒提示保护输出。

十二、布局层级

12.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑布局层级。
超过 hooks 提示分开晾晒。

12.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

12.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

12.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

布局层级维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

十三、颜色语义

13.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑颜色语义。
浴袍按双倍位置计算。

13.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

13.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

13.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

十四、异常输入

14.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑异常输入。
总占用实时派生。

14.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

14.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

14.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

十五、验证场景

15.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑验证场景。
超过 hooks 提示分开晾晒。

15.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

15.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

15.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  1. 读取输入。
  2. 执行业务规则。
  3. 处理边界。
  4. 刷新界面。

十六、性能表现

16.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑性能表现。
浴袍按双倍位置计算。

16.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

16.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

16.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

性能表现维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

十七、维护方式

17.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑维护方式。
总占用实时派生。

17.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

17.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

17.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

十八、代码职责

18.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑代码职责。
超过 hooks 提示分开晾晒。

18.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

18.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

18.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

  • 毛巾挂钩容量保存真实状态。
  • used参与核心逻辑。
  • 已用位置和容量状态形成反馈。
  • 双倍占位、容量比较和分开晾晒提示保护输出。

十九、运行结论

19.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑运行结论。
浴袍按双倍位置计算。

19.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

19.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

19.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

二十、项目启示

20.1 数据结构

毛巾挂钩容量使用 hooks、towels、robes 支撑项目启示。
总占用实时派生。

20.2 业务规则

毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较
used 及相关表达式承担核心行为。

20.3 交互刷新

控件回调更新状态并显示已用位置和容量状态。
ArkUI 根据依赖关系刷新。

20.4 边界结论

双倍占位、容量比较和分开晾晒提示
结果因此保持稳定。

项目启示维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

二十一、真实源码分段

21.1 源码片段 1

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.2 源码片段 2

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.3 源码片段 3

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.4 源码片段 4

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.5 源码片段 5

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.6 源码片段 6

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.7 源码片段 7

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

21.8 源码片段 8

以下代码来自当前项目。

@Entry @Component struct Index{@State hooks:number=6;@State towels:number=4;@State robes:number=1;used():number{return this.towels+this.robes*2}build(){Column(){Text('毛巾挂钩容量').fontSize(27).fontWeight(FontWeight.Bold).width('100%');Text('浴袍按双倍占位估算挂钩容量').fontColor('#667085').width('100%').margin({top:6,bottom:22});Text(this.used()+'/'+this.hooks+' 个位置').fontSize(42).fontWeight(FontWeight.Bold).fontColor(this.used()>this.hooks?'#B42318':'#175CD3');Text('挂钩数量:'+this.hooks).width('100%').margin({top:22});Slider({value:this.hooks,min:2,max:16,step:1}).onChange((v:number)=>this.hooks=Math.round(v)).width('100%');Text('毛巾 '+this.towels+' 条 · 浴袍 '+this.robes+' 件').width('100%').margin({top:18});Slider({value:this.towels,min:0,max:16,step:1}).onChange((v:number)=>this.towels=Math.round(v)).width('100%');Slider({value:this.robes,min:0,max:6,step:1}).onChange((v:number)=>this.robes=Math.round(v)).width('100%');Text(this.used()>this.hooks?'挂钩不足,建议分开晾晒':'容量充足').width('100%').textAlign(TextAlign.Center).padding(18).margin({top:20}).backgroundColor(this.used()>this.hooks?'#FFF1F0':'#F0FAF4').borderRadius(9)}.width('100%').height('100%').padding(22).backgroundColor('#FFFFFF')}}

该片段参与按毛巾和浴袍占位判断挂钩数量是否足够。

二十二、运行案例

22.1 默认数据

使用6 个挂钩、4 毛巾、1 浴袍。
观察 hooks、towels、robes 与结果。
确认已用位置和容量状态可复算。

22.2 最小边界

双倍占位、容量比较和分开晾晒提示
观察 hooks、towels、robes 与结果。
确认已用位置和容量状态可复算。

22.3 临界输入

围绕双倍占位、容量比较和分开晾晒提示验证阈值。
观察 hooks、towels、robes 与结果。
确认已用位置和容量状态可复算。

22.4 连续操作

连续执行 used。
观察 hooks、towels、robes 与结果。
确认已用位置和容量状态可复算。

验证维度 当前实现 作用
状态 hooks、towels、robes 保存数据
规则 毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较 生成反馈
边界 双倍占位、容量比较和分开晾晒提示 保护结果
结果 已用位置和容量状态 呈现结论

二十三、技术取舍

23.1 本地状态

毛巾挂钩容量围绕双倍占位、容量比较和分开晾晒提示选择本地状态。
当前职责集中且可追踪。

23.2 具名函数

毛巾挂钩容量围绕双倍占位、容量比较和分开晾晒提示选择具名函数。
当前职责集中且可追踪。

23.3 声明式组件

毛巾挂钩容量围绕双倍占位、容量比较和分开晾晒提示选择声明式组件。
当前职责集中且可追踪。

23.4 清晰边界

毛巾挂钩容量围绕双倍占位、容量比较和分开晾晒提示选择清晰边界。
当前职责集中且可追踪。

二十四、总结

毛巾挂钩容量使用鸿蒙 ArkTS 完成了“按毛巾和浴袍占位判断挂钩数量是否足够”闭环。
核心规则是:毛巾占一个位置,浴袍占两个位置,used 与 hooks 比较。
状态字段为 hooks、towels、robes。
状态建模业务函数声明式界面 共同保证结果稳定。


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐