HarmonyOS NavPathStack 参数丢失怎么办:中式美食详情页为什么只传 recipeId 不传整道菜
中式美食从菜谱列表点进详情页看起来只是一个跳转但这里很容易埋坑。有人会把整道菜对象直接放进 NavPathStack 参数详情页拿到对象就展示。刚写时很省事后面一遇到页面恢复、收藏状态变化、菜谱数据更新就会出现参数丢失、字段旧、详情和列表不一致的问题。先看哪里容易错列表页展示的是卡片详情页展示的是完整菜谱。卡片对象通常只够列表用不一定包含完整步骤、营养说明、最近浏览、收藏状态。把这个对象直接传给详情页短期能跑长期会让页面边界变乱。场景传整对象会怎样只传 recipeId 会怎样菜谱字段后来增加详情页拿不到新字段详情页重新读最新数据收藏状态变化对象里的状态可能旧详情页按状态源重新合并页面恢复大对象不稳定小参数更稳列表卡片裁剪字段详情页内容不完整详情页按 id 查完整记录为什么这个问题会反复出现原因是列表页对象和详情页对象职责不同。列表页对象是为了快速展示卡片详情页对象是为了完整展示一条菜谱。把它们混成一份数据后面一定会出现“这里能用、那里不准”的问题。坏写法把整道菜塞进路由下面这种写法很常见点卡片时把recipe整个传进去。openDetail(recipe:RecipeCardVM){this.pathStack.pushPath({name:RecipeDetail,param:{recipe}})}详情页再这样拿aboutToAppear(){constparamthis.pathInfo.paramasRecordstring,RecipeCardVMthis.recipeparam.recipe}这段代码的问题不在于不能跳转而是详情页被列表页的数据结构绑死了。列表卡片为了省首屏性能可能只带标题、封面、评分详情页却需要步骤、食材、收藏、笔记、最近浏览。你把列表对象传过去详情页就只能拿旧对象凑。好写法只传 recipeId更稳的做法是只把recipeId当成路由参数。详情页拿到 id 后自己去 Repository 里读完整数据。openDetail(recipeId:string){this.pathStack.pushPath({name:RecipeDetail,param:{recipeId}})}详情页这样处理Staterecipe:RecipeDetailVM|nullnullStateloading:booleanfalseStateerrorText:stringasyncaboutToAppear(){constparamthis.pathInfo.paramasRecordstring,stringconstrecipeIdparam.recipeIdif(!recipeId){this.errorText菜谱参数不完整return}awaitthis.loadRecipe(recipeId)}privateasyncloadRecipe(recipeId:string){this.loadingtruetry{this.recipeawaitRecipeDetailRepository.instance.getDetail(recipeId)}catch(err){this.errorText菜谱加载失败}finally{this.loadingfalse}}这不是为了多写代码而是为了把责任分清楚。列表页只负责告诉详情页“你要看哪一道菜”详情页自己负责“怎么拿完整数据”。详情页的数据要重新合并状态中式美食详情页不只是菜谱内容还会显示收藏、最近浏览、笔记入口、购物清单入口。这些状态可能在别的页面也会改所以详情页读到菜谱基础信息后还要合并用户状态。classRecipeDetailRepository{asyncgetDetail(recipeId:string):PromiseRecipeDetailVM{constrecipeawaitRecipeDao.findById(recipeId)if(!recipe){thrownewError(recipe not found)}constisFavoriteFavoriteRepository.instance.has(recipeId)constnoteCountawaitNoteRepository.instance.countByRecipeId(recipeId)constviewedAtawaitViewedRepository.instance.touch(recipeId)return{...recipe,isFavorite,noteCount,viewedAt}}}这样做以后详情页不会依赖列表页传来的旧isFavorite。用户从搜索页进、收藏页进、推荐页进详情页都能拿到同一套结果。来源页面传什么详情页怎么处理首页推荐recipeId查完整菜谱并合并收藏搜索结果recipeId查完整菜谱并记录浏览收藏列表recipeId查完整菜谱并确认是否仍收藏最近浏览recipeId查完整菜谱并更新浏览时间参数丢失时要有兜底路由参数再简单也要处理缺失。比如页面被恢复、开发时手动跳转、历史路径不完整都可能让recipeId为空。这个时候不要让详情页白屏。functionreadRecipeId(param:unknown):string{if(!param||typeofparam!object){return}constvalue(paramasRecordstring,string).recipeIdreturntypeofvaluestring?value:}页面层拿不到 id就直接进入错误态constrecipeIdreadRecipeId(this.pathInfo.param)if(!recipeId){this.errorText没有找到这道菜请返回列表重新打开return}这个提示不需要复杂但一定要有。没有兜底时参数一丢用户看到的就是空页面有兜底时至少知道怎么回到列表。不要把缓存当成真实数据还有一种写法看起来折中列表页还是传一份卡片对象详情页先用它展示再慢慢查完整数据。这种写法不是完全不能用但要清楚它只是“临时占位”不能当成真实详情。typeDetailParam{recipeId:stringpreviewTitle?:stringpreviewCover?:string}如果想让详情页打开更快可以传previewTitle和previewCover做首屏占位但真实内容还是要按recipeId重新读。这样用户不会看到空白代码边界也不会乱。asyncaboutToAppear(){constparamthis.pathInfo.paramasDetailParamthis.previewTitleparam.previewTitle||this.previewCoverparam.previewCover||if(!param.recipeId){this.errorText没有找到这道菜请返回列表重新打开return}awaitthis.loadRecipe(param.recipeId)}这里的判断标准很简单占位数据可以旧真实详情不能旧。标题和封面短暂展示一下没问题收藏状态、步骤、笔记数量、购物清单入口必须来自详情页重新读取后的结果。数据可以从参数带吗原因recipeId可以稳定、小、能定位业务对象previewTitle可以只做打开瞬间的占位previewCover可以只做打开瞬间的占位isFavorite不建议可能刚被别的页面改过steps不建议字段大且详情页要最新完整数据这样写还有一个好处后面加预加载、缓存、离线数据时边界不会乱。参数负责“带路”Repository 负责“给最终答案”。怎么验证这个改法验证时不要只从首页点一次详情。要覆盖不同入口。验证动作期待结果能发现的问题首页点菜谱进详情详情完整展示基础跳转是否正常搜索结果进详情能展示完整步骤列表卡片字段是否不够收藏页进详情后取消收藏返回收藏页状态正确收藏状态是否统一最近浏览进详情浏览时间更新详情页是否负责记录浏览手动构造空参数出现错误提示参数兜底是否缺失如果这几条都过了说明详情页不再依赖某个列表对象。入口变多以后页面也不会乱。以后怎么避免以后遇到页面跳转参数先问两个问题。第一这个参数是不是能稳定代表业务对象recipeId可以整道菜对象不一定可以。第二目标页面是不是需要最新数据详情页通常需要所以应该自己读不要相信来源页面顺手带过来的旧对象。解决这类问题的关键不是某个 API而是边界。NavPathStack 负责导航不负责替页面保存完整业务数据Repository 负责拿数据不应该被页面绕开。中式美食的详情页只传recipeId后收藏状态、最近浏览、笔记数量、购物清单入口都可以在详情页统一合并页面恢复和多入口跳转也会稳很多。

相关新闻

机器人打了一架,我从中拆出了一条千亿产业链

机器人打了一架,我从中拆出了一条千亿产业链

昨晚,深圳南山文体中心,两台1.73米、75公斤的铁疙瘩在铁笼里互殴了25分钟。揭幕战:白色雄鹰 vs 斗牛士,25分钟激烈对抗全网曝光量5到8亿。甄子丹坐在台下看。广东卫视直播冲上全国热度TOP1。一场机器人格斗赛。总奖金1400万&#…

2026/7/18 16:17:43阅读更多 →
深度剖析向量检索:为什么 FAISS 无法解决生产环境下的“增删改查”?

深度剖析向量检索:为什么 FAISS 无法解决生产环境下的“增删改查”?

许多开发者的向量检索是这样开始的:写下两百行 Python 代码,调起 FAISS 跑个 demo,检索准确且快如闪电。这容易让人产生一种错觉——向量检索不过如此。但当这些代码用到进生产环境,就会出现很多问题:删不掉的过期向量、对不上的业务 ID。此时你才发现,检索算法库根本不是…

2026/7/18 16:17:43阅读更多 →
2026证件照换底色详细操作方法:手机、网页、电脑PS全场景教程

2026证件照换底色详细操作方法:手机、网页、电脑PS全场景教程

日常求职报名、证件办理、线上考试、资质审核等场景中,经常需要根据要求更换证件照底色,白底、红底、深蓝底是最常用的三种标准底色。很多人会遇到抠图有白边、底色不标准、导出有水印、画质压缩模糊等问题。2026年主流的证件照换底色方式分为四大类&…

2026/7/18 16:15:43阅读更多 →
语言模型选型时该关注哪些维度?给技术决策者一套不靠营销话术的评估框架

语言模型选型时该关注哪些维度?给技术决策者一套不靠营销话术的评估框架

做语言模型选型,最怕的不是模型不够多,而是信息太杂:排行榜很多,宣传口径很多,真正能落到技术决策上的指标却不够清楚。很多团队在前期也会先通过 AI模型聚合平台 neneai.cn 这类入口做横向体验,再进入更细…

2026/7/18 17:11:48阅读更多 →
蓝海AIoT一站式工作台:四大行业设备技能全新上线

蓝海AIoT一站式工作台:四大行业设备技能全新上线

海康行业设备品类众多,为加速AIoT方案的落地与集成,萤石蓝海AIoT一站式工作台发布首批成果,将四类核心设备的对接能力沉淀为四项标准技能: 智能门禁:人员、门禁卡、人脸库、权限、控门流程,一站式搞定。 多…

2026/7/18 17:11:48阅读更多 →
2026年数字化展望:从“业务驱动”到“数据驱动”,中台战略的演进之路

2026年数字化展望:从“业务驱动”到“数据驱动”,中台战略的演进之路

一、前言:2026年,数字化转型进入“范式换代”拐点站在2026年数字化转型的全新节点,国内企业数字化建设已经彻底告别“信息化补短板、建系统堆架构”的初级阶段。过去十年,绝大多数企业的数字化建设属于业务驱动型转型:…

2026/7/18 17:11:48阅读更多 →
【Bug已解决】Windows Desktop crash/hang with codex.exe MoBEX and node_repl/extension-host BEX64 after ...

【Bug已解决】Windows Desktop crash/hang with codex.exe MoBEX and node_repl/extension-host BEX64 after ...

【Bug已解决】Windows Desktop crash/hang with codex.exe MoBEX and node_repl/extension-host BEX64 after recent update 解决方案原始报错线索:Windows Desktop crash/hang with codex.exe MoBEX and node_repl/extension-host BEX64 after recent update&#…

2026/7/18 17:11:48阅读更多 →
中彦仪表技术分享:0.8m³ 到 G100 家工表膜片需求与市场分层逻辑

中彦仪表技术分享:0.8m³ 到 G100 家工表膜片需求与市场分层逻辑

在膜式燃气表的核心部件体系中,橡胶膜片是决定计量精度、使用寿命与环境适应性的 "心脏" 元件。从居民家中 0.8m/h 的微型燃气表,到工业园区 G100 级别的大流量工业计量设备,不同流量规格的燃气表对膜片的材料配方、结构设计、工艺…

2026/7/18 17:11:48阅读更多 →
一个人、一个App、700万营收:AI时代的小生意开始成立了

一个人、一个App、700万营收:AI时代的小生意开始成立了

AI Coding把Demo做烂了,真正稀缺的是把产品跑起来"不会写代码,不应该等于没资格做产品。"现在做一个AI产品,最容易的是做出一个看起来很像产品的东西。输入一句话,几分钟生成页面;再接上大模型,补…

2026/7/18 17:09:48阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →