ArkTS 进阶之道(24):LocalStorage 页面级状态边界——为啥同页面多组件共享页面卸载就销毁

发布时间:2026/9/21 9:40:56

ArkTS 进阶之道(24):LocalStorage 页面级状态边界——为啥同页面多组件共享页面卸载就销毁 ArkTS 进阶之道24LocalStorage 页面级状态边界——为啥同页面多组件共享页面卸载就销毁本文是「ArkTS 进阶之道」系列第 24 篇续「ArkUI 状态联动」深水区。上篇讲 AppStorage 应用级状态存储槽边界所有页面共享页面卸载状态仍存在。本文讲页面级状态边界LocalStorage 页面级局部状态存储——根因在同页面多组件共享页面卸载就销毁。能力系列篇 24 讲过 LocalStorage 怎么用本文讲为哈 LocalStorage 页面级状态合法 AppStorage 应用级状态跨页面共享冗余——根因在页面级状态存储槽。一、开篇LocalStorage 不是应用级 AppStorage是页面级局部状态存储你写 React 时页面级状态是「useState 魔法」组件卸载 state 销毁// React 页面级状态useState组件卸载 state 销毁 function Page() { const [count, setCount] useState(0) // 页面级 state return button onClick{() setCount(count 1)}count{count}/button } // React 页面级状态useState组件卸载 state 销毁不跨页面共享你写鸿蒙 ArkTS 时LocalStorage页面级局部状态存储——同页面多组件共享页面卸载就销毁// ArkTS LocalStorage 页面级局部状态存储 interface LocalState { localCount: number; localTheme: string } const localStorage new LocalStorage({ localCount: 0, localTheme: #52C41A } as LocalState) Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorage 键 build() { Button(ChildA count${this.localCount}) .onClick(() { this.localCount }) // ✅ 改 → LocalStorage 同步 → 同页面 ChildB 同步 } } // LocalStorage 页面级局部状态同页面多组件共享页面卸载就销毁useState 魔法 vs 页面级状态存储槽的区别React 把页面级状态当 useState 魔法组件卸载 state 销毁ArkTS 把 LocalStorage 当「页面级状态存储槽」同页面多组件共享页面卸载就销毁。根因不是 useState 魔法是页面级状态存储槽——LocalStorage 页面级局部状态存储同页面多组件共享页面卸载就销毁。二、根因LocalStorage 的页面级状态存储槽机制鸿蒙 ArkUI 的 LocalStorage 是页面级状态存储槽绑定——同页面多组件共享页面卸载就销毁来自三重绑定机制。机制 1LocalStorage 页面级局部状态存储——不是应用级 AppStorageLocalStorage 荬饰器页面级局部状态存储——同页面多组件共享页面卸载就销毁// ✅ 初始化 LocalStorage页面级局部状态 interface LocalState { localCount: number; localTheme: string } const localStorage new LocalStorage({ localCount: 0, localTheme: #52C41A } as LocalState) Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorage 键 build() { Column() { Text(localCount ${this.localCount}) Button(改 localCount) .onClick(() { this.localCount }) // ✅ 改 → LocalStorage 同步 → 同页面 ChildB 同步 } } } // LocalStorage 页面级局部状态同页面多组件共享页面卸载就销毁不跨页面共享页面级局部状态存储LocalStoragelocalCount页面级局部状态存储——同页面多组件共享localCount页面卸载就销毁不跨页面共享。根因不是应用级 AppStorage 是页面级状态存储槽——LocalStorage 页面级局部状态存储同页面多组件共享页面卸载就销毁。机制 2LocalStorageLink 双向绑定 LocalStorage 键——改 Storage 同页面同步LocalStorageLink 荬饰器双向绑定 LocalStorage 键——改 LocalStorageLink → LocalStorage 同步 → 同页面其他组件同步Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorage 键 LocalStorageLink(localTheme) localTheme: string #52C41A build() { Column() { Text(localCount ${this.localCount}).fontColor(this.localTheme) Button(改 localCount) .onClick(() { this.localCount }) // ✅ 改 → LocalStorage 同步 → 同页面 ChildB 同步 Button(改 localTheme红色) .onClick(() { this.localTheme #FF4D4F }) // ✅ 改 → LocalStorage 同步 → 同页面 ChildB 同步 } } } // LocalStorageLink 双向绑定 LocalStorage 键改 → LocalStorage 同步 → 同页面其他组件同步双向LocalStorageLink 双向绑定 LocalStorage 键LocalStorageLinklocalCount荬饰器双向绑定 LocalStorage 键——改localCount→ LocalStorage 同步 → 同页面其他组件同步双向。根因不是组件级 State 是页面级状态存储槽——LocalStorageLink 双向绑定 LocalStorage 键改 → LocalStorage 同步 → 同页面其他组件同步双向。机制 3同页面多组件共享 LocalStorage——ChildA 改 ChildB 同步LocalStorage同页面多组件共享——ChildA 改 LocalStorage 键 → 同页面 ChildB 同步不用 props 透传Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ ChildA 绑定 LocalStorage 键 build() { Button(ChildA 改 localCount) .onClick(() { this.localCount }) // ✅ ChildA 改 → LocalStorage 同步 → ChildB 同步 } } Component struct ChildB { LocalStorageLink(localCount) localCount: number 0 // ✅ ChildB 也绑定同一 LocalStorage 键 build() { Text(ChildB localCount ${this.localCount}) // ✅ ChildB 自动同步不用 props 透传 } } // 同页面多组件共享 LocalStorageChildA 改 → ChildB 同步不用 props 透传同页面共享同页面多组件共享 LocalStorageLocalStoragelocalCount同页面多组件共享——ChildA 改localCount→ 同页面 ChildB 同步不用 props 透传。根因不是 props 透传是页面级状态存储槽——LocalStorage 同页面多组件共享ChildA 改 → ChildB 同步不用 props 透传。机制 4LocalStorage vs AppStorage 应用级状态边界——页面级 vs 应用级LocalStorage页面级局部状态同页面多组件共享页面卸载就销毁AppStorage应用级全局状态所有页面共享页面卸载状态仍存在——根因都是状态存储但绑的机制不同// ✅ LocalStorage 路径页面级局部状态同页面多组件共享页面卸载就销毁 const localStorage new LocalStorage({ localCount: 0 } as LocalState) Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorage 键 build() { Button(ChildA ${this.localCount}).onClick(() { this.localCount }) } } Component struct ChildB { LocalStorageLink(localCount) localCount: number 0 // ✅ 同页面 ChildB 也绑定 build() { Button(ChildB ${this.localCount}).onClick(() { this.localCount }) } } // ✅ LocalStorage 页面级局部状态ChildA 改 → ChildB 同步同页面共享页面卸载就销毁 // ⚠ AppStorage 路径应用级全局状态所有页面共享页面卸载状态仍存在 AppStorage.setOrCreate(appCount, 0) Entry Component struct Page1 { StorageLink(appCount) appCount: number 0 // ⚠ StorageLink 绑定 AppStorage 键跨页面共享 build() { Button(Page1 ${this.appCount}).onClick(() { this.appCount }) } } Entry Component struct Page2 { StorageLink(appCount) appCount: number 0 // ⚠ Page2 也绑定同一 AppStorage 键 build() { Button(Page2 ${this.appCount}).onClick(() { this.appCount }) } } // ⚠ AppStorage 应用级全局状态Page1 改 → Page2 同步跨页面共享页面卸载状态仍存在LocalStorage vs AppStorage 应用级状态边界LocalStorage 路径——页面级局部状态同页面多组件共享页面卸载就销毁推荐单页面状态。AppStorage 路径——应用级全局状态所有页面共享页面卸载状态仍存在跨页面状态。根因都是状态存储但绑的机制不同——LocalStorage 页面级状态存储槽同页面共享AppStorage 应用级状态存储槽跨页面共享。三、真机配图LocalStorage 页面级状态边界——同页面多组件共享初始态ChildA/B localCount0、localTheme“#52C41A” 绿色文字均页面级状态初始态齐点调三按钮后ChildA localCount11、ChildB localCount11 同页面同步、localTheme“#FF4D4F” 红色文字同步均同页面多组件共享证据齐对比证据点 ChildA 改 localCount 后 ChildB localCount 同步同页面多组件共享点 ChildA 改 localTheme红色后 ChildB localTheme 同步红字点 ChildB 改 localCount10 后 ChildA localCount 同步ChildB 改 ChildA 也同步双向。LocalStorage 页面级局部状态——同页面多组件共享页面卸载就销毁LocalStorageLink 双向绑定 LocalStorage 键ChildA 改 ChildB 同步不用 props 透传。四、真解法LocalStorage 页面级状态的三个场景场景 1LocalStorage 同页面多组件计数器90% 场景首选页面级状态存储槽interface LocalState { localCount: number } const localStorage new LocalStorage({ localCount: 0 } as LocalState) Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorage 键 build() { Column() { Text(ChildA count ${this.localCount}) Button(ChildA 改 count) .onClick(() { this.localCount }) // ✅ 改 → LocalStorage 同步 → 同页面 ChildB 同步 } } } Component struct ChildB { LocalStorageLink(localCount) localCount: number 0 // ✅ 同页面 ChildB 也绑定 build() { Text(ChildB count ${this.localCount}) } // ✅ ChildB 自动同步不用 props 透传 }为哈能跑LocalStorage 同页面多组件计数器——页面级状态存储槽LocalStoragelocalCount页面级局部状态LocalStorageLink 双向绑定 LocalStorage 键ChildA 改localCount→ LocalStorage 同步 → 同页面 ChildB 同步双向。首选这个90% 的场景同页面多组件状态共享用 LocalStorage 页面级状态存储槽就够。要写「同页面多组件状态共享计数器等」时用这个——不用 props 透传冗余LocalStorage 页面级状态存储槽同页面多组件共享。场景 2LocalStorage 同页面多组件主题色页面级状态存储槽同页面共享主题interface LocalState { localTheme: string } const localStorage new LocalStorage({ localTheme: #52C41A } as LocalState) Component struct ThemeA { LocalStorageLink(localTheme) localTheme: string #52C41A // ✅ LocalStorageLink 绑定 build() { Column() { Text(ThemeA theme ${this.localTheme}).fontColor(this.localTheme) Button(ThemeA 改 theme红色) .onClick(() { this.localTheme #FF4D4F }) // ✅ 改 → LocalStorage 同步 → 同页面 ThemeB 同步 } } } Component struct ThemeB { LocalStorageLink(localTheme) localTheme: string #52C41A // ✅ 同页面 ThemeB 也绑定 build() { Text(ThemeB theme ${this.localTheme}).fontColor(this.localTheme) } // ✅ 自动同步 } // LocalStorage 同页面多组件主题色ThemeA 改 → ThemeB 同步同页面共享主题不用 props 透传为哈能跑LocalStorage 同页面多组件主题色——页面级状态存储槽LocalStoragelocalTheme页面级局部状态LocalStorageLink 双向绑定 LocalStorage 键ThemeA 改localTheme→ LocalStorage 同步 → 同页面 ThemeB 同步双向。要写「同页面多组件主题共享主题色等」时用这个——不用 props 透传冗余LocalStorage 页面级状态存储槽同页面多组件共享主题。场景 3LocalStorage vs AppStorage 作用域边界页面级 vs 应用级选对存储槽// ✅ LocalStorage 页面级同页面多组件共享页面卸载就销毁单页面状态用这个 const localStorage new LocalStorage({ pageState: 0 } as LocalState) Component struct PageComponent { LocalStorageLink(pageState) pageState: number 0 // ✅ 页面级页面卸载就销毁 build() { Button(页面级 ${this.pageState}).onClick(() { this.pageState }) } } // ✅ AppStorage 应用级所有页面共享页面卸载状态仍存在跨页面状态用这个 AppStorage.setOrCreate(appState, 0) Entry Component struct CrossPage { StorageLink(appState) appState: number 0 // ✅ 应用级跨页面共享页面卸载状态仍存在 build() { Button(应用级 ${this.appState}).onClick(() { this.appState }) } } // LocalStorage vs AppStorage 作用域边界单页面状态用 LocalStorage页面卸载就销毁 // 跨页面状态用 AppStorage所有页面共享页面卸载状态仍存在为哈能跑LocalStorage vs AppStorage 作用域边界——页面级状态用 LocalStorage同页面多组件共享页面卸载就销毁应用级状态用 AppStorage所有页面共享页面卸载状态仍存在。要写「选对状态存储槽页面级 vs 应用级等」时用这个——单页面状态用 LocalStorage页面卸载就销毁跨页面状态用 AppStorage跨页面共享。五、一句话哲学LocalStorage 不是应用级 AppStorage是页面级局部状态存储槽的同页面多组件共享。ArkUI 的 LocalStorage 荬饰器页面级局部状态存储同页面多组件共享页面卸载就销毁。根因不是应用级 AppStorage 是页面级状态存储槽——LocalStorage 页面级局部状态存储同页面多组件共享页面卸载就销毁 LocalStorageLink 双向绑定 LocalStorage 键改 → LocalStorage 同步 → 同页面其他组件同步双向 同页面多组件共享 LocalStorageChildA 改 ChildB 同步不用 props 透传 LocalStorage vs AppStorage 应用级状态边界页面级 vs 应用级。对比 React 页面级状态 useState 魔法组件卸载 state 销毁ArkTS LocalStorage 页面级状态存储槽同页面多组件共享。状态联动深水区串讲Watch 绑 State 变触发副作用回调槽篇 68 Link $ 语法双向绑定跨组件同步篇 69 Provide/Consume 跨层级传递槽祖辈后辈同步篇 70 Observed/ObjectLink 嵌套对象观测槽子属性改刷 UI篇 71 AppStorage 应用级状态存储槽所有页面共享篇 72 LocalStorage 页面级状态存储槽同页面多组件共享篇 73页面卸载就销毁——续「ArkUI 状态联动」深水区讲状态联动深水区Watch 副作用回调槽边界 Link $ 语法双向绑定边界 Provide/Consume 跨层级传递槽边界 Observed/ObjectLink 嵌套对象观测槽边界 AppStorage 应用级状态存储槽边界 LocalStorage 页面级状态存储槽边界。系列预告下篇篇 74讲 StorageLink/StorageProp 应用级状态绑定边界AppStorage 绑定根因续「ArkUI 状态联动」深水区。五阶段哲学体系类型哲学50-52→ 作用域哲学53-55→ 状态哲学56-59→ 渎染哲学60-62→ 组件设计63-67→ 状态联动深水区68讲清 ArkTS/ArkUI 进阶哲学。能力系列回链能力系列篇本文进阶点篇 24 LocalStorage 用法LocalStorage 页面级状态存储槽边界根因同页面多组件共享页面卸载就销毁篇 23 AppStorage 用法应用级状态存储槽边界所有页面共享页面卸载状态仍存在篇 59 Watch 用法状态联动深水区Watch 副作用回调槽 vs onClick 直接调副作用边界真机 demo 完整代码// 篇 73 demoLocalStorage 页面级状态边界 // LocalStorage 页面级局部状态同页面多组件共享页面卸载销毁 // LocalStorageLink/LocalStorageProp 绑定 LocalStorage 键 // ✅ 初始化 LocalStorage页面级局部状态 interface LocalState { localCount: number; localTheme: string } const localStorage new LocalStorage({ localCount: 0, localTheme: #52C41A } as LocalState) // ✅ 子组件1LocalStorageLink 双向绑定 LocalStorage 键页面级局部状态 Component struct ChildA { LocalStorageLink(localCount) localCount: number 0 // ✅ LocalStorageLink 双向绑定 LocalStorageLink(localTheme) localTheme: string #52C41A build() { Column({ space: 6 }) { Text(子组件 ChildALocalStorageLink 双向绑定) .fontSize(11).fontColor(#2563eb).fontWeight(FontWeight.Bold) Text(localCount ${this.localCount}).fontSize(13).fontColor(#2563eb) Text(localTheme ${this.localTheme}).fontSize(11).fontColor(this.localTheme) Button(ChildA 改 localCountLocalStorageLink 同页面同步) .width(92%).height(36).fontSize(10) .onClick(() { this.localCount }) // ✅ 改 → LocalStorage 同步 → ChildB 同步 Button(ChildA 改 localTheme红色) .width(92%).height(36).fontSize(10) .onClick(() { this.localTheme #FF4D4F }) // ✅ 改 → LocalStorage 同步 → ChildB 同步 } .width(92%).padding(8).backgroundColor(#e0f0ff).borderRadius(6) } } // ✅ 子组件2同页面另一组件也绑定 LocalStorage 键同页面多组件共享 Component struct ChildB { LocalStorageLink(localCount) localCount: number 0 // ✅ ChildB 也绑定同一 LocalStorage 键 LocalStorageLink(localTheme) localTheme: string #52C41A build() { Column({ space: 6 }) { Text(子组件 ChildB同页面共享 LocalStorage) .fontSize(11).fontColor(#ff6600).fontWeight(FontWeight.Bold) Text(localCount ${this.localCount}).fontSize(13).fontColor(#ff6600) Text(localTheme ${this.localTheme}).fontSize(11).fontColor(this.localTheme) Button(ChildB 改 localCount10LocalStorageLink 同页面同步) .width(92%).height(36).fontSize(10) .onClick(() { this.localCount 10 }) // ✅ ChildB 改 → ChildA 同步同页面共享 } .width(92%).padding(8).backgroundColor(#fff0e0).borderRadius(6) } } Entry Component struct Index { build() { Column({ space: 12 }) { Text(篇 73 配图LocalStorage 页面级状态边界) .fontSize(16).fontWeight(FontWeight.Bold).margin({ top: 16, bottom: 4 }) Text(LocalStorage 页面级局部状态同页面多组件共享页面卸载销毁vs AppStorage 应用级跨页面共享) .fontSize(10).fontColor(#888).margin({ bottom: 8 }) ChildA() ChildB() Text(同页面 ChildA 改 localCount → ChildB 同步同页面多组件共享) .fontSize(10).fontColor(#333).margin({ top: 8 }) Text(页面卸载 → LocalStorage 销毁vs AppStorage 应用级页面卸载状态仍存在) .fontSize(10).fontColor(#ff6600) } .width(100%).height(100%).alignItems(HorizontalAlign.Center) } }写鸿蒙 ArkUI 记住LocalStorage 不是应用级 AppStorage 是页面级局部状态存储槽的同页面多组件共享——LocalStorage 荬饰器页面级局部状态存储同页面多组件共享页面卸载就销毁。根因不是应用级 AppStorage 是页面级状态存储槽——LocalStorage 页面级局部状态存储同页面多组件共享页面卸载就销毁 LocalStorageLink 双向绑定 LocalStorage 键改 → LocalStorage 同步 → 同页面其他组件同步双向 同页面多组件共享 LocalStorageChildA 改 ChildB 同步不用 props 透传 LocalStorage vs AppStorage 应用级状态边界页面级 vs 应用级。LocalStorage 同页面多组件计数器用页面级状态存储槽首选90% 场景LocalStorage 同页面多组件主题色用页面级状态存储槽同页面共享主题LocalStorage vs AppStorage 作用域边界选对存储槽单页面用 LocalStorage 页面卸载就销毁跨页面用 AppStorage 跨页面共享。页面级状态存储槽同页面多组件共享页面卸载就销毁是 ArkUI 状态联动深水区核心
延伸阅读

更多相关文章

2026/9/20 6:05:29

ROS2动作通信C++实战:从接口定义到机械臂拾取放置完整实现

1. 项目概述:从话题到实战的跨越最近在机器人开发者社区里,一个高频出现的话题是“如何让ROS2的动作(Action)真正用起来”。很多朋友,尤其是从ROS1迁移过来或者刚入门的开发者,在理解了话题(Top…

2026/9/20 6:05:33

【单片机毕业设计】基于光敏红外传感器的室内节能灯光控制系统 基于嵌入式单片机的环境光照灯光档位调控系统(014901)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/20 6:05:35

BepInEx完整指南:如何为Unity游戏添加无限插件功能

BepInEx完整指南:如何为Unity游戏添加无限插件功能 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否想过为你最喜欢的Unity游戏添加新功能、修复Bug或创造全新的游…

2026/9/21 3:28:31

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/21 3:33:19

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/21 0:02:23

OpenResearch:构建可复现的开放式研究工作流

第一次看到“OpenResearch”这个名字,我脑子里冒出的不是某个具体软件,而更像一种研究方式的宣言:开放、可复现、可验证。这三件事放在一起,其实比大多数人想象中难得多。过去几年我一直在折腾自己的研究工作流,从纯纸…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码