2026/4/16 15:20:24
网站建设
项目流程
鞍山网站建设企业,多站点网站群的建设与管理,专业模板网站制作,淘宝官网首页电脑版手机登录子玥酱 #xff08;掘金 / 知乎 / CSDN / 简书 同名#xff09; 大家好#xff0c;我是 子玥酱#xff0c;一名长期深耕在一线的前端程序媛 #x1f469;#x1f4bb;。曾就职于多家知名互联网大厂#xff0c;目前在某国企负责前端软件研发相关工作#xff0c;主要聚…子玥酱掘金 / 知乎 / CSDN / 简书 同名大家好我是子玥酱一名长期深耕在一线的前端程序媛 。曾就职于多家知名互联网大厂目前在某国企负责前端软件研发相关工作主要聚焦于业务型系统的工程化建设与长期维护。我持续输出和沉淀前端领域的实战经验日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。技术方向前端 / 跨端 / 小程序 / 移动端工程化内容平台掘金、知乎、CSDN、简书创作特点实战导向、源码拆解、少空谈多落地文章状态长期稳定更新大量原创输出我的内容主要围绕前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读展开。文章不会停留在“API 怎么用”而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍希望能帮你在实际工作中少走弯路。子玥酱 · 前端成长记录官 ✨ 如果你正在做前端或准备长期走前端这条路 关注我第一时间获取前端行业趋势与实践总结 可领取11 类前端进阶学习资源工程化 / 框架 / 跨端 / 面试 / 架构 一起把技术学“明白”也用“到位”持续写作持续进阶。愿我们都能在代码和生活里走得更稳一点 文章目录引言一个最典型的“放大版 App”写法PC 世界的第一刀多窗口App 的状态模型在 PC 下会迅速膨胀PC 应用的核心不是页面而是“对象生命周期”如果你还用 App 的生命周期会发生什么一个更接近 PC 思维的结构用代码对比差异会非常明显错误的 App 化写法更合理的 PC 写法输入模型PC 和 App 根本不是一回事“放大版 App”为什么一定会失控总结引言如果你第一次做 HarmonyOS PC 应用大概率会有一种感觉“这不就是 App屏幕更大、窗口更多一点吗”于是你会很自然地复用 App 的页面结构复用 App 的状态模型复用 App 的生命周期理解短期内这些选择都能跑。但只要项目一复杂你就会开始发现问题不是“适不适配大屏”而是整个模型就不对。一个最典型的“放大版 App”写法很多 PC 项目一开始都长这样EntryComponentstruct MainPage{StatecurrentPage:stringhomebuild(){if(this.currentPagehome){HomeView()}elseif(this.currentPageeditor){EditorView()}}}这是非常标准的 App 思维单入口单状态页面切换即状态切换在移动端这没问题。但一旦放到 PC 环境你马上会遇到第一个现实需求。PC 世界的第一刀多窗口PC 用户不会问你“能不能返回”他们会问“能不能再开一个”于是你开始加代码Statewindows:WindowInfo[][]openWindow(type){this.windows.push(createWindow(type))}接着你发现问题来了currentPage 失去意义状态开始分叉页面不再是“线性路径”App 的“页面栈”模型第一次失效。App 的状态模型在 PC 下会迅速膨胀为了支撑多窗口你会开始写这种状态interfaceWindowState{id:stringactive:booleandoc?:Document}StatewindowStates:WindowState[][]然后逻辑开始变得复杂activateWindow(id){this.windowStates.forEach(ww.activefalse)find(id).activetrue}你慢慢会意识到一件事你已经不在写“页面状态”而是在写“进程级状态”。但你还在用 App 的方式管理它。PC 应用的核心不是页面而是“对象生命周期”在 PC 应用里真正长期存在的往往是这些东西文档会话编辑上下文后台任务文件句柄比如一个编辑器型应用核心代码更像这样classDocumentSession{path:stringdirty:booleancursor:Position}这些对象的特点是生命周期可能是小时级独立于任何窗口存在可以被多个窗口引用这和 App 的页面状态几乎是两个世界。如果你还用 App 的生命周期会发生什么很多团队会继续用 App 的方式思考onBackground(){saveAll()}onForeground(){restoreAll()}但 PC 应用更关心的是窗口是否最小化是否仍在运行是否在后台计算是否有未保存内容换句话说PC 应用的“活着”和是否在前台几乎无关。一个更接近 PC 思维的结构成熟的 HarmonyOS PC 应用更像是这样分层App Shell ├─ 生命周期 ├─ 系统集成 └─ 菜单 / 快捷键 Application Core ├─ Document / Session ├─ Task Manager ├─ Undo / Redo └─ State Persistence Window Layer ├─ WindowController ├─ View Binding └─ Focus / Input关键点在于窗口只是视图状态不属于它。用代码对比差异会非常明显错误的 App 化写法Componentstruct EditorPage{Statedoc:Document}文档跟着页面走页面销毁文档就危险了。更合理的 PC 写法classDocumentManager{open(path):DocumentSessionclose(session)}Componentstruct EditorWindow{session:DocumentSession}窗口只是“绑定”文档而不是“拥有”文档。输入模型PC 和 App 根本不是一回事App 更关注触摸手势页面级响应PC 应用的核心是键盘鼠标焦点快捷键冲突这意味着onKeyDown(event){if(event.ctrlevent.keyS){save()}}这类逻辑不应该挂在某个页面上而应该挂在应用核心或窗口控制器里。“放大版 App”为什么一定会失控因为它默认页面 世界页面切换 状态切换生命周期 进程生命周期而 PC 应用真实的世界是对象长期存在多窗口并行后台持续运行这不是尺寸问题是模型问题。总结如果你问HarmonyOS PC 应用真的只是“放大版 App”吗答案其实很简单UI 可以放大但模型不能。HarmonyOS 给了你同一套语言同一套 UI 框架同一套系统能力但它并没有承诺你可以用同一套应用模型覆盖所有形态。真正跑得久的 PC 应用都会在某一刻意识到页面只是入口对象和生命周期才是核心。