鸿蒙 ArkTS 实战:宠物拾便袋库存的状态建模、算法与交互实现

前言

宠物拾便袋库存页面根据当前袋数和每日用量估算可用天数,同时支持每日扣减与整卷补充。
项目通过 ArkTSArkUI@State 管理 bags、daily、days。
核心逻辑是 calc:calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
默认状态为 bags=30、daily=3、days=0,页面展示 当前袋数、每日用量和预计可用天数。
在这里插入图片描述
图 1:DevEco Studio 中的 ArkTS 开发环境。

页面上的结果均由当前状态实时计算。
边界判断必须与按钮、滑块或核心函数保持一致。
宠物拾便袋库存的实现重点在于:daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

一、业务对象

1.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述业务对象,所有字段都能追溯到页面真实状态。

1.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

1.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

1.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化

二、状态字段

2.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述状态字段,所有字段都能追溯到页面真实状态。

2.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

2.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

2.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

@State bags:number=30;

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

三、核心规则

3.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述核心规则,所有字段都能追溯到页面真实状态。

3.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

3.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

3.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  1. 读取页面当前状态。
  2. 执行本次交互规则。
  3. 应用范围或条件保护。
  4. 刷新文字、颜色和统计结果。

四、输入控件

4.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述输入控件,所有字段都能追溯到页面真实状态。

4.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

4.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

4.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化

五、事件回调

5.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述事件回调,所有字段都能追溯到页面真实状态。

5.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

5.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

5.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

@State daily:number=3;

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

六、边界保护

6.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述边界保护,所有字段都能追溯到页面真实状态。

6.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

6.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

6.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  • 状态来源:bags、daily、days。
  • 核心行为:calc。
  • 页面输出:当前袋数、每日用量和预计可用天数。
  • 操作入口:调整每日用量、登记今日使用、补充一卷。

七、状态反馈

7.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述状态反馈,所有字段都能追溯到页面真实状态。

7.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

7.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

7.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

八、默认运行

8.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述默认运行,所有字段都能追溯到页面真实状态。

8.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

8.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

8.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化
@State days:number=0;

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

九、状态迁移

9.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述状态迁移,所有字段都能追溯到页面真实状态。

9.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

9.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

9.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  1. 读取页面当前状态。
  2. 执行本次交互规则。
  3. 应用范围或条件保护。
  4. 刷新文字、颜色和统计结果。

十、数值与数组更新

10.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述数值与数组更新,所有字段都能追溯到页面真实状态。

10.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

10.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

10.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

十一、声明式刷新

11.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述声明式刷新,所有字段都能追溯到页面真实状态。

11.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

11.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

11.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

calc():void{this.days=this.daily>0?Math.floor(this.bags/this.daily):0}

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

十二、布局层级

12.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述布局层级,所有字段都能追溯到页面真实状态。

12.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

12.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

12.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化

十三、颜色语义

13.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述颜色语义,所有字段都能追溯到页面真实状态。

13.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

13.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

13.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

十四、异常输入

14.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述异常输入,所有字段都能追溯到页面真实状态。

14.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

14.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

14.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  • 状态来源:bags、daily、days。
  • 核心行为:calc。
  • 页面输出:当前袋数、每日用量和预计可用天数。
  • 操作入口:调整每日用量、登记今日使用、补充一卷。
this.bags=Math.max(0,this.bags-this.daily)

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

十五、验证场景

15.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述验证场景,所有字段都能追溯到页面真实状态。

15.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

15.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

15.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  1. 读取页面当前状态。
  2. 执行本次交互规则。
  3. 应用范围或条件保护。
  4. 刷新文字、颜色和统计结果。

十六、性能表现

16.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述性能表现,所有字段都能追溯到页面真实状态。

16.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

16.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

16.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化

十七、维护方式

17.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述维护方式,所有字段都能追溯到页面真实状态。

17.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

17.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

17.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

this.bags+=15;this.calc()

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

十八、代码职责

18.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述代码职责,所有字段都能追溯到页面真实状态。

18.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

18.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

18.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

十九、运行结论

19.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述运行结论,所有字段都能追溯到页面真实状态。

19.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

19.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

19.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

二十、项目启示

20.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述项目启示,所有字段都能追溯到页面真实状态。

20.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

20.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

20.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化
Slider({value:this.daily,min:1,max:10,step:1})

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

二十一、真实源码分段

21.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述真实源码分段,所有字段都能追溯到页面真实状态。

21.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

21.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

21.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  1. 读取页面当前状态。
  2. 执行本次交互规则。
  3. 应用范围或条件保护。
  4. 刷新文字、颜色和统计结果。

二十二、运行案例

22.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述运行案例,所有字段都能追溯到页面真实状态。

22.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

22.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

22.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

  • 状态来源:bags、daily、days。
  • 核心行为:calc。
  • 页面输出:当前袋数、每日用量和预计可用天数。
  • 操作入口:调整每日用量、登记今日使用、补充一卷。

二十三、技术取舍

23.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述技术取舍,所有字段都能追溯到页面真实状态。

23.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

23.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

23.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

Text('预计可用 '+this.days+' 天')

该片段直接对应 宠物拾便袋库存 源码中的真实定义或交互,不包含项目之外的假设。

二十四、总结

24.1 数据结构

宠物拾便袋库存使用 bags、daily、days 描述总结,所有字段都能追溯到页面真实状态。

24.2 业务规则

calc 在 daily 大于零时用 Math.floor(bags / daily) 计算完整可用天数;使用动作防止 bags 低于零,补充动作固定增加 15 个。
核心表达式为 daily>0 ? Math.floor(bags/daily) : 0

24.3 交互刷新

调整每日用量、登记今日使用、补充一卷会修改对应状态,ArkUI 随后刷新当前袋数、每日用量和预计可用天数。

24.4 边界结论

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

维度 当前实现 页面作用
状态 bags、daily、days 保存业务数据
规则 daily>0 ? Math.floor(bags/daily) : 0 计算显示结果
边界 daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。 阻止非法结果
操作 调整每日用量、登记今日使用、补充一卷 驱动状态变化

二十五、实现复盘

25.1 状态入口

宠物拾便袋库存以 bags、daily、days 作为唯一状态来源,页面不额外保存可由公式得到的显示结果。

25.2 默认结果

初始值 bags=30、daily=3、days=0 让页面启动后立即呈现可观察结果。

25.3 正常操作

执行 调整每日用量、登记今日使用、补充一卷 时,只修改本次业务需要的字段。

25.4 边界操作

daily 由 Slider 限制为 1 到 10;扣减使用 Math.max,库存不能变成负数。

25.5 结果刷新

状态变化后,当前袋数、每日用量和预计可用天数会由声明式组件重新计算并显示。

25.6 颜色反馈

正常与异常状态使用不同颜色表达,但文字结论始终是主要信息。

25.7 按钮门槛

按钮可用条件与库存或状态门槛绑定,避免用户进入无效分支。

25.8 范围限制

Slider 的最小值、最大值和步长共同约束可输入范围。

25.9 计算复用

核心逻辑 calc 被集中表达,文本和颜色可以共享同一判断。

25.10 数据一致性

同一次操作涉及多个字段时,源码在一个回调中完成同步更新。

25.11 列表或数值

数值状态直接赋值,对象数组则通过新数组引用触发列表刷新。

25.12 异常路径

异常路径不会生成负库存、越界结果或互相冲突的提示。

25.13 复现步骤

先观察默认值,再改变一个输入并执行主要动作,即可复现完整状态变化。

25.14 维护重点

维护时应保持 daily>0 ? Math.floor(bags/daily) : 0 与页面提示语义一致。

25.15 适用场景

该页面适合需要快速记录、检查、估算或库存流转的轻量场景。

25.16 完整闭环

输入、规则、边界和反馈构成闭环,当前源码已经覆盖文章描述的全部能力。

二十六、运行验证

26.1 首屏验证

打开宠物拾便袋库存 后,默认数字、状态文字和控件位置应与源码初始值一致。

26.2 操作验证

每次只改变一个输入并执行对应按钮,可以清楚观察状态字段与结果区域的关联。

26.3 边界验证

将滑块移动到最小值和最大值,再触发操作,页面仍应保持合法结果与明确提示。

26.4 回归验证

完成一次完整业务流后重新检查核心数字,输入、计算和显示应保持一致。

相关资源

相关资源:

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐