鸿蒙 ArkTS 实战:Family Recipe Heritage 从家传菜谱传承到厨房生活工具完整解析
鸿蒙 ArkTS 实战:Family Recipe Heritage 从家传菜谱传承到厨房生活工具完整解析
前言
Family Recipe Heritage 是一个基于鸿蒙 ArkTS 的厨房生活工具,主题围绕 长辈姓名、菜名、步骤照片、味道备注、节日标签和传承记录 展开。它把家庭饮食里的一个具体场景拆成输入、计算、保存、提醒和反馈几个环节,适合做轻量级移动端原型。
本文直接依据项目 Index.ets 源码写作,重点分析状态字段如何绑定页面,按钮动作如何修改业务状态,以及结果文案如何帮助用户完成下一步操作。
厨房工具的体验重点是快:打开页面、改一两个字段、点一个按钮,就应该看到明确结果。

这张图可作为文章配图。实际发布时可以替换为应用运行截图,让读者更直观看到输入区、指标区和反馈区。
一、项目定位与业务场景
1.1 应用定位
用户记录长辈、菜品、味道备注和节日标签,并通过步骤照片沉淀家庭菜谱记忆。
这个项目的技术重点不是复杂算法,而是把一个生活场景拆成清楚的状态和动作。这样的代码非常适合学习 ArkTS 单页应用的状态管理。
1.2 使用价值
| 价值 | 说明 | 页面体现 |
|---|---|---|
| 快速记录 | 减少纸笔记录成本 | TextInput |
| 即时计算 | 自动得出关键结果 | Step photos |
| 行为沉淀 | 保存次数、备注或状态 | @State |
| 决策辅助 | 用反馈文案提示下一步 | 状态文本 |
二、源码入口与页面结构
2.1 入口组件
项目使用标准 ArkTS 页面结构。
@Entry
@Component
struct Index {
build() {
Scroll() {
Column({ space: 16 }) {
Text('Family Recipe Heritage')
}
}
}
}
2.2 页面结构
页面可以拆成以下区域:
- 标题区:展示
Family Recipe Heritage。 - 输入区:填写菜谱、库存、参数、评分或备注。
- 指标区:展示
Step photos。 - 动作区:执行保存、推荐、计算或记录。
- 反馈区:显示计划、提醒、结果或警告。
三、状态模型抽象
3.1 业务模型
从源码可以抽象出 RecipeHeritageState。
type RecipeHeritageState = {
title: string;
metric: string | number;
note: string;
status: string;
};
3.2 实际状态代码
项目中的真实状态如下。
@State elder: string = 'Grandma';
@State dish: string = 'Braised pork';
@State photoSteps: number = 6;
@State tasteNote: string = 'Less sugar, soft texture';
@State festival: string = 'Spring Festival';
3.3 状态职责
| 状态 | 类型 | 职责 |
|---|---|---|
elder |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
dish |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
photoSteps |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
tasteNote |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
festival |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
status |
状态字段 | 支撑 家传菜谱传承 的输入、计算或反馈 |
这些状态字段都能直接在页面上找到对应位置,说明项目没有堆叠无用状态。
四、默认数据与首屏体验
4.1 默认内容
| 默认项 | 字段 | 含义 |
|---|---|---|
| Grandma | elder | 默认长辈 |
| Braised pork | dish | 默认菜名 |
4.2 默认内容的作用
默认内容让用户第一次打开页面就能理解用途。比如 家传菜谱传承 不是空白表单,而是带着一个可直接编辑的示例。
- 示例文本降低理解成本。
- 默认指标让页面更完整。
- 按钮可以马上测试。
五、核心计算或保存逻辑
5.1 主函数
项目最核心的业务逻辑如下。
saveRecipe(): void {
this.status = this.elder + "'s " + this.dish + ' tagged for ' + this.festival + '.';
}
5.2 流程说明
- 填写长辈姓名
- 记录菜名和味道
- 添加节日标签
- 保存菜谱或增加步骤照片
这条流程覆盖了用户从输入到结果的主要路径,是整篇应用逻辑的主线。
六、辅助动作设计
6.1 辅助函数
项目还提供了辅助动作,用来补充保存、复用、提醒或二次处理。
addStepPhoto(): void {
this.photoSteps++;
this.status = 'Step photo added. Total: ' + this.photoSteps + '.';
}
6.2 为什么需要辅助动作
| 动作类型 | 作用 | 示例场景 |
|---|---|---|
| 保存 | 固化当前记录 | 菜谱、笔记、口味 |
| 复用 | 复用已有参数 | 咖啡冲煮、早餐模板 |
| 提醒 | 给出风险或计划 | 库存、外卖、剩菜 |
| 计算 | 生成费用、克重、库存 | 火锅、烘焙、茶饮 |
七、输入组件设计
7.1 TextInput 绑定
输入框使用 onChange 同步到状态字段。
TextInput({ text: this.elder, placeholder: 'Input value' })
.onChange((value: string) => this.elder = value)
7.2 数字输入
涉及克重、比例、库存、费用、人数、评分等数据时,源码会使用数字输入或 Number() 转换。
const value = Number(inputText);
if (Number.isNaN(value)) {
// keep previous state or show message
}
数字处理越稳,厨房工具越可信。
八、指标展示策略
8.1 核心指标
项目关注的核心指标是 Step photos。
Text('Step photos ' + value)
.fontSize(24)
.fontWeight(FontWeight.Bold)
8.2 指标分类
| 指标类型 | 示例 | 作用 |
|---|---|---|
| 数量 | 库存、照片、收藏、打卡 | 表示积累 |
| 费用 | 人均成本、总收入 | 辅助决策 |
| 时间 | 计时、准备分钟 | 管理流程 |
| 评分 | 店铺、风味、失败次数 | 形成复盘 |
九、反馈文案设计
9.1 文案职责
反馈文案让用户知道操作结果。
this.status = 'Action completed.';
this.reminder = 'Next step is ready.';
9.2 好文案标准
| 标准 | 说明 | 例子 |
|---|---|---|
| 具体 | 包含当前对象 | 保存了某个菜谱 |
| 可执行 | 指向下一步 | 加入购物清单 |
| 可复盘 | 保留问题信息 | 外卖配送问题 |
| 不打扰 | 简短明确 | 库存已更新 |
十、布局与视觉结构
10.1 Scroll + Column
页面使用 Scroll 和 Column 组织内容,适合表单型工具。
Scroll() {
Column({ space: 16 }) {
Text('Family Recipe Heritage')
// inputs
// metric
// buttons
// feedback
}.padding(20).width('100%')
}
10.2 视觉层级
| 层级 | 内容 | 目的 |
|---|---|---|
| 标题 | 应用名称 | 快速识别 |
| 输入 | 用户数据 | 修改业务状态 |
| 指标 | 关键结果 | 给出判断依据 |
| 按钮 | 业务动作 | 推动流程 |
| 文案 | 反馈说明 | 指导下一步 |
十一、运行验证路径
11.1 手工验证
可以按下面流程验证页面:
- 打开页面,确认标题为
Family Recipe Heritage。 - 检查默认输入值是否显示。
- 修改第一个输入框。
- 点击主按钮。
- 观察指标或反馈文案是否变化。
// 手工验证伪代码
const before = 'default kitchen state';
const action = 'tap main button';
const after = 'metric or message updated';
console.info(before + ' -> ' + action + ' -> ' + after);
11.2 验证重点
| 验证点 | 预期 |
|---|---|
| 输入同步 | 状态随输入变化 |
| 主按钮 | 执行业务函数 |
| 指标 | 根据状态重新计算 |
| 文案 | 说明操作结果 |
| 连续点击 | 不破坏页面状态 |
十二、边界情况处理
12.1 数值边界
厨房工具常见数字包括人数、克重、库存、费用、时间和评分。
const safe = Math.max(0, Number(text));
12.2 业务边界
| 场景 | 风险 | 处理方式 |
|---|---|---|
| 人数为 0 | 除法异常 | 使用 Math.max(1, value) |
| 库存不足 | 负库存 | 使用下限保护 |
| 存放过久 | 食安风险 | 给出提醒 |
| 评分太低 | 误复购 | 阻止或提醒 |
| 比例为空 | 换算异常 | 保留结果提示 |
十三、扩展为完整厨房应用
13.1 业务扩展
后续可以加入语音故事、步骤相册、家庭成员协作、节日菜单和菜谱导出。
13.2 工程抽象
可以抽象统一厨房记录模型。
interface KitchenRecord {
name: string;
value: number;
unit: string;
note: string;
createdAt: number;
}
function createKitchenRecord(name: string, value: number, unit: string, note: string): KitchenRecord {
return {
name,
value,
unit,
note,
createdAt: Date.now()
};
}
这个模型可以支撑历史记录、库存统计、菜谱收藏和提醒系统。
十四、维护与优化建议
14.1 状态拆分
当前项目状态数量不多,适合放在页面组件中。后续如果加入历史列表或多页面,可以再拆成数据服务。
14.2 函数命名
函数名要贴合动作,例如 saveNote、checkStock、recommend、perPerson。这样的命名能让读者快速理解逻辑。
function formatMessage(prefix: string, value: string): string {
return prefix + ': ' + value;
}
14.3 结果复用
如果某个计算结果会在多个区域展示,建议封装函数,而不是复制计算表达式。
十五、工程复盘
15.1 当前实现亮点
- 页面结构直观。
- 状态字段贴合厨房业务。
- 输入和反馈路径短。
- 计算逻辑集中,易于验证。
- 后续扩展方向清晰。
15.2 可复用经验
Family Recipe Heritage 的实现方式适合迁移到各种生活工具:菜谱、库存、清单、饮品笔记、家庭记忆和消费复盘。核心方法都是把生活里的动作抽象成状态更新。
总结
Family Recipe Heritage 用鸿蒙 ArkTS 构建了一个围绕 家传菜谱传承 的厨房生活工具。它通过 @State 保存用户输入和结果,用 TextInput 收集数据,用按钮触发业务函数,再用指标和文案给出即时反馈。
从工程角度看,这个项目已经完成了单页工具最重要的闭环。后续继续接入历史记录、模板库、图片、通知或本地存储,都可以在当前结构上平滑扩展。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
补充说明:当前页面把厨房场景拆成了输入、计算和反馈三段,阅读成本很低。
补充说明:指标展示能帮助用户快速判断这次操作是否值得保存或复用。
补充说明:反馈文案负责承接下一步动作,避免用户点击后没有确认感。
补充说明:后续接入持久化时,可以优先保存输入值、指标、备注和创建时间。
相关资源:
更多推荐




所有评论(0)