尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ArkTS 进阶之道(25):@StorageLink/@StorageProp 应用级状态绑定边界——为啥双向绑定 vs 单向只读
ArkTS 进阶之道25StorageLink/StorageProp 应用级状态绑定边界——为啥双向绑定 vs 单向只读本文是「ArkTS 进阶之道」系列第 25 篇续「ArkUI 状态联动」深水区。上篇讲 LocalStorage 页面级状态存储槽边界同页面多组件共享页面卸载就销毁。本文讲应用级状态绑定边界StorageLink 双向绑定 vs StorageProp 单向只读——根因在双向绑定槽 vs 单向只读槽。能力系列篇 25 讲过 StorageLink/StorageProp 怎么用本文讲为哈 StorageLink 双向绑定合法 StorageProp 单向只读组件不能改——根因在双向绑定槽 vs 单向只读槽。一、开篇StorageLink 不是单向只读是双向绑定 AppStorage 键你写 React 时应用级状态绑定是「useSelector 魔法」useSelector 双向 sync redux store// React 应用级状态绑定useSelector useDispatch 双向 sync function Comp() { const count useSelector(state state.count) // 单向读 redux store const dispatch useDispatch() return button onClick{() dispatch({ type: INC })}count{count}/button // 改用 dispatch } // React 应用级状态绑定useSelector 单向读 useDispatch 改双向 sync 魔法你写鸿蒙 ArkTS 时StorageLink双向绑定 AppStorage 键——组件改互同步// ArkTS StorageLink 双向绑定 AppStorage 键 AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Button(appCount${this.appCount}) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } // StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向useSelector 魔法 vs 双向绑定槽的区别React 把应用级状态绑定当 useSelector 魔法单向读 useDispatch 改ArkTS 把 StorageLink 当「双向绑定槽」组件改互同步。根因不是 useSelector 魔法是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向。二、根因StorageLink/StorageProp 的双向绑定槽 vs 单向只读槽机制鸿蒙 ArkUI 的 StorageLink/StorageProp 是应用级状态绑定槽——StorageLink 双向绑定槽StorageProp 单向只读槽来自三重绑定机制。机制 1StorageLink 双向绑定 AppStorage 键——组件改互同步StorageLink 荬饰器双向绑定 AppStorage 键——组件改 → AppStorage 同步 → 其他组件同步双向AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { Text(appCount ${this.appCount}) Button(改 appCount) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } } // StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向StorageLink 双向绑定 AppStorage 键StorageLinkappCount荬饰器双向绑定 AppStorage 键——组件改appCount→ AppStorage 同步 → 其他组件同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改互同步双向。机制 2StorageProp 单向只读绑定——AppStorage 改组件同步组件不能改StorageProp 荬饰器单向只读绑定——AppStorage 改 → 组件同步组件改只改本地副本不回传AppStorage.setOrCreate(appCount, 0) Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Column() { Text(appCount ${this.appCount}只读组件不能改) Button(试改 appCount) .onClick(() { // ⚠ StorageProp 只读改只改组件本地副本不回传 AppStorage单向只读 this.appCount // ⚠ 只改本地副本AppStorage 不同步其他组件不同步 }) } } } // StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传StorageProp 单向只读绑定StoragePropappCount荬饰器单向只读绑定——AppStorage 改appCount→ 组件同步组件改appCount只改本地副本不回传 AppStorage。根因不是双向同步是单向只读槽——StorageProp 单向只读绑定AppStorage 改组件同步组件改不回传。机制 3StorageLink vs StorageProp 边界——双向绑定 vs 单向只读StorageLink双向绑定组件改互同步StorageProp单向只读AppStorage 改组件同步组件改不回传——根因都是绑定 AppStorage 键但绑的机制不同AppStorage.setOrCreate(appCount, 0) // ✅ StorageLink 路径双向绑定组件改 → AppStorage 同步 → 其他组件同步双向 Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定 build() { Button(LinkComp ${this.appCount}) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } // ⚠ StorageProp 路径单向只读AppStorage 改 → 组件同步组件改不回传 Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读 build() { Button(PropComp ${this.appCount}) .onClick(() { this.appCount }) // ⚠ 改只改本地副本AppStorage 不同步 } } // StorageLink vs StorageProp 边界双向绑定改互同步vs 单向只读组件改不回传StorageLink vs StorageProp 边界StorageLink 路径——双向绑定组件改 → AppStorage 同步 → 其他组件同步双向推荐组件要改用。StorageProp 路径——单向只读AppStorage 改 → 组件同步组件改只改本地副本不回传推荐组件只读用。根因都是绑定 AppStorage 键但绑的机制不同——StorageLink 双向绑定槽改互同步StorageProp 单向只读槽组件改不回传。机制 4AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage.set改 AppStorage 键→ StorageLink StorageProp 都同步AppStorage 是源AppStorage.setOrCreate(appCount, 0) Entry Component struct Index { StorageLink(appCount) linkCount: number 0 // ✅ StorageLink 双向绑定 build() { Column() { Button(直接改 AppStorage.set(appCount, 50)) .onClick(() { AppStorage.set(appCount, 50) // ✅ AppStorage 改 → StorageLink 同步 StorageProp 同步 // ✅ AppStorage 是源StorageLink 和 StorageProp 都从 AppStorage 同步 }) } } } // AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage.setappCount改 AppStorage 键 → StorageLink StorageProp 都同步AppStorage 是源。根因不是组件改是 AppStorage 源——AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。三、真机配图StorageLink/StorageProp 应用级状态绑定边界——双向 vs 只读初始态LinkComp appCount0 葝色双向、PropComp appCount0 橙色只读均绑定边界初始态齐点调三按钮后LinkComp appCount50 葝色被 AppStorage.set 直接改 50 覆盖、PropComp appCount50 橙色只读同步、StorageLink 双向 vs StorageProp 只读边界证据齐对比证据点 LinkComp 改 appCount 后 AppStorage 同步StorageLink 双向点 PropComp 试改 appCount 后只改本地副本不回传StorageProp 只读点直接改 AppStorage.set(“appCount”, 50) 后 LinkComp PropComp 都同步 50AppStorage 是源。StorageLink 双向绑定 vs StorageProp 单向只读——StorageLink 绑定 AppStorage 键改互同步双向StorageProp 绑定 AppStorage 键只读组件改不回传。四、真解法StorageLink/StorageProp 应用级状态绑定的三个场景场景 1StorageLink 双向绑定计数器90% 场景首选组件要改用双向AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { Text(appCount ${this.appCount}) Button(改 appCount) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } }为哈能跑StorageLink 双向绑定计数器——双向绑定槽StorageLinkappCount双向绑定 AppStorage 键组件改appCount→ AppStorage 同步 → 其他组件同步双向。首选这个90% 的场景组件要改应用级状态用 StorageLink 双向绑定槽就够。要写「组件改应用级状态计数器等」时用这个——不用 StorageProp 单向只读组件改不回传StorageLink 双向绑定改互同步。场景 2StorageProp 单向只读绑定展示组件只读用单向AppStorage 改组件同步AppStorage.setOrCreate(appCount, 0) Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Text(appCount ${this.appCount}只读展示组件不能改) // ✅ AppStorage 改 → 组件同步只读展示 } } // StorageProp 单向只读绑定展示AppStorage 改 → 组件同步只读展示组件不能改为哈能跑StorageProp 单向只读绑定展示——单向只读槽StoragePropappCount单向只读绑定 AppStorage 键AppStorage 改appCount→ 组件同步只读展示组件不能改。要写「组件只读展示应用级状态只读展示等」时用这个——不用 StorageLink 双向绑定组件改会回传StorageProp 单向只读组件不能改。场景 3StorageLink StorageProp 混用改组件用 StorageLink只读组件用 StoragePropAppStorage.setOrCreate(appCount, 0) // ✅ 改组件用 StorageLink 双向绑定组件改 → AppStorage 同步 Component struct EditComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { TextInput({ text: ${this.appCount}, placeholder: 输入值 }) .onChange((value: string) { this.appCount parseInt(value) || 0 }) // ✅ 改 → AppStorage 同步 } } } // ✅ 只读组件用 StorageProp 单向只读AppStorage 改 → 组件同步只读展示 Component struct ShowComp { StorageProp(appCount) appCount: number 0 // ✅ StorageProp 单向只读组件不能改 build() { Text(只读展示 appCount ${this.appCount}) // ✅ AppStorage 改 → 组件同步只读展示 } } // StorageLink StorageProp 混用改组件用 StorageLink 双向只读组件用 StorageProp 单向只读为哈能跑StorageLink StorageProp 混用——改组件用 StorageLink 双向绑定组件改 → AppStorage 同步只读组件用 StorageProp 单向只读AppStorage 改 → 组件同步只读展示。要写「改组件 只读组件混用编辑 展示等」时用这个——改组件用 StorageLink 双向只读组件用 StorageProp 单向只读。五、一句话哲学StorageLink 不是单向只读是双向绑定 AppStorage 键的改互同步StorageProp 是单向只读的组件不能改。ArkUI 的 StorageLink 荬饰器双向绑定 AppStorage 键组件改互同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向 StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传 StorageLink vs StorageProp 边界双向绑定 vs 单向只读 AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。对比 React 应用级状态绑定 useSelector 魔法单向读 useDispatch 改ArkTS StorageLink 双向绑定槽改互同步。状态联动深水区串讲Watch 绑 State 变触发副作用回调槽篇 68 Link $ 语法双向绑定跨组件同步篇 69 Provide/Consume 跨层级传递槽祖辈后辈同步篇 70 Observed/ObjectLink 嵌套对象观测槽子属性改刷 UI篇 71 AppStorage 应用级状态存储槽所有页面共享篇 72 LocalStorage 页面级状态存储槽同页面多组件共享篇 73 StorageLink/StorageProp 应用级状态绑定边界双向 vs 只读篇 74StorageLink 双向绑定 vs StorageProp 单向只读——续「ArkUI 状态联动」深水区讲状态联动深水区Watch 寕作用回调槽边界 Link $ 语法双向绑定边界 Provide/Consume 跨层级传递槽边界 Observed/ObjectLink 嵌套对象观测槽边界 AppStorage 应用级状态存储槽边界 LocalStorage 页面级状态存储槽边界 StorageLink/StorageProp 应用级状态绑定边界。系列预告下篇篇 75讲 LocalStorageLink/LocalStorageProp 页面级状态绑定边界LocalStorage 绑定根因续「ArkUI 状态联动」深水区。五阶段哲学体系类型哲学50-52→ 作用域哲学53-55→ 状态哲学56-59→ 渎染哲学60-62→ 组件设计63-67→ 状态联动深水区68讲清 ArkTS/ArkUI 进阶哲学。能力系列回链能力系列篇本文进阶点篇 25 StorageLink/StorageProp 用法StorageLink/StorageProp 应用级状态绑定边界根因双向绑定 vs 单向只读篇 23 AppStorage 用法应用级状态存储槽边界所有页面共享页面卸载状态仍存在篇 59 Watch 用法状态联动深水区Watch 儝作用回调槽 vs onClick 直接调副作用边界真机 demo 完整代码// 篇 74 demoStorageLink/StorageProp 应用级状态绑定边界 // StorageLink 双向绑定 AppStorage 键改互同步vs StorageProp 单向只读绑定组件不能改 AppStorage.setOrCreate(appCount, 0) AppStorage.setOrCreate(appTheme, #007DFF) // ✅ StorageLink 双向绑定组件改互同步组件改 → AppStorage 同步AppStorage 改 → 组件同步 Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column({ space: 6 }) { Text(组件 LinkCompStorageLink 双向绑定) .fontSize(11).fontColor(#2563eb).fontWeight(FontWeight.Bold) Text(appCount ${this.appCount}).fontSize(13).fontColor(#2563eb) Button(LinkComp 改 appCountStorageLink 双向组件改 → AppStorage 同步) .width(92%).height(36).fontSize(10) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } .width(92%).padding(8).backgroundColor(#e0f0ff).borderRadius(6) } } // ⚠ StorageProp 单向只读绑定组件AppStorage 改 → 组件同步组件不能改只读 Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Column({ space: 6 }) { Text(组件 PropCompStorageProp 单向只读) .fontSize(11).fontColor(#ff6600).fontWeight(FontWeight.Bold) Text(appCount ${this.appCount}只读组件不能改).fontSize(13).fontColor(#ff6600) Button(PropComp 试改 appCountStorageProp 只读改不回传 AppStorage) .width(92%).height(36).fontSize(10) .onClick(() { // ⚠ StorageProp 只读改只改组件本地副本不回传 AppStorage单向只读 this.appCount // ⚠ 只改本地副本AppStorage 不同步其他组件不同步 }) } .width(92%).padding(8).backgroundColor(#fff0e0).borderRadius(6) } } Entry Component struct Index { StorageLink(appTheme) appTheme: string #007DFF State log: string (未操作) build() { Column({ space: 12 }) { Text(篇 74 配图StorageLink/StorageProp 应用级状态绑定边界) .fontSize(16).fontWeight(FontWeight.Bold).margin({ top: 16, bottom: 4 }) Text(StorageLink 双向绑定改互同步vs StorageProp 单向只读组件不能改) .fontSize(10).fontColor(#888).margin({ bottom: 8 }) LinkComp() PropComp() // ✅ 直接改 AppStorageStorageLink 同步StorageProp 也同步 Button(直接改 AppStorage.set(appCount, 50)) .width(92%).height(40).fontSize(12) .onClick(() { AppStorage.set(appCount, 50) // ✅ AppStorage 改 → StorageLink 同步 StorageProp 同步 this.log AppStorage.set appCount50StorageLink StorageProp 都同步 }) Text(日志${this.log}).fontSize(10).fontColor(#333).margin({ top: 4 }) } .width(100%).height(100%).alignItems(HorizontalAlign.Center) } }写鸿蒙 ArkUI 记住StorageLink 不是单向只读是双向绑定 AppStorage 键的改互同步——StorageLink 荬饰器双向绑定 AppStorage 键组件改互同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向 StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传 StorageLink vs StorageProp 边界双向绑定 vs 单向只读 AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。StorageLink 双向绑定计数器用双向绑定槽首选90% 场景StorageProp 单向只读绑定展示用单向只读槽组件不能改StorageLink StorageProp 混用改组件用 StorageLink 双向只读组件用 StorageProp 单向只读。双向绑定 vs 单向只读是 ArkUI 状态联动深水区核心
RELATED

相关推荐

AI副业定价不是拍脑袋:用蒙特卡洛模拟+客户支付意愿热力图定最终报价

AI副业定价不是拍脑袋:用蒙特卡洛模拟+客户支付意愿热力图定最终报价

更多请点击: https://codechina.net 第一章:AI副业定价不是拍脑袋:用蒙特卡洛模拟客户支付意愿热力图定最终报价 传统AI副业定价常依赖经验或竞品对标,易陷入“高了没人买、低了不赚钱”的两难。本章引入数据驱动的双引擎定价法&…

📅 2026/10/15 7:02:05
Python驱动海康工业相机实战:从环境搭建到缺陷检测应用

Python驱动海康工业相机实战:从环境搭建到缺陷检测应用

1. 项目缘起:为什么用Python驱动海康工业相机? 在工业视觉项目里,选型上位机开发语言时,C#和C往往是主流选择,尤其是在对实时性要求极高的场景下。但这两年,我发现身边越来越多的工程师,包括我自…

📅 2026/11/13 20:56:19
降AIGC黑科技!AI率92%暴降至5%!实测10款降AIGC软件!学生党狂喜!

降AIGC黑科技!AI率92%暴降至5%!实测10款降AIGC软件!学生党狂喜!

2026 年各大高校和期刊平台的 AI 检测系统又升级了,知网 AIGC、维普 AI、万方智能检测三大平台的算法迭代速度越来越快,上个月能蒙混过关的改写方式,这个月直接就会被标红预警。单纯的同义词替换、语序调整早就不管用了,想要有效降…

📅 2026/11/12 15:06:34
MORE NEWS

更多资讯

📰

商丘特种电工证怎么考 上岗必备全攻略

商丘特种电工证怎么考 上岗必备全攻略 工地太忙根本没时间复习考试,这是很多电工朋友的共同困扰,特别是像在郑州金水区做市政公用工程的朋友,项目赶工期、加班加点已经成了常态,很多人甚至连考试时间都记不清。商丘特种电工证是很多电工上岗必备的资质,…

📰

襄汾哪能学电工证报名避坑指南:别再被中介忽悠了

襄汾哪能学电工证报名避坑指南:别再被中介忽悠了 你是不是也遇到过这种情况?想考电工证,却不知道去哪报名,生怕被中介坑了钱还拿不到证?特别是像“襄汾哪能学电工证”这样的问题,网上一搜,信息五花八门,真假难辨,让人无从下手。其实,这个问题很多人…

📰

四级电工证复核考试网上查询怎么操作?学历不高也能考

四级电工证复核考试网上查询怎么操作?学历不高也能考 你是不是也担心自己学历不高,四级电工证复核考试网上查询流程太复杂?别急,这事儿我跟你说, 根本不是学历问题,而是你没找到对的路…

📰

考电工证的题库书上岗必须要这个证吗

电工证题库书在哪买?多久拿证别再被中介骗了 你是不是也遇到过这种情况:想考个电工证,但不知道去哪报名,怕被中介坑,又担心拿证时间太久,耽误工作?其实,这些顾虑都正常,但只要掌握正确的信息和流程,你就能顺利拿到证,走上正轨。…

📰

不同地区考的电工证怎么选?保姆级教程教你避坑

不同地区考的电工证怎么选?保姆级教程教你避坑 你是不是也遇到过这种情况:想考电工证,但不知道去哪报名,怕被中介坑?尤其是不同地区考的电工证,内容、流程、要求都不一样,搞不好还白花钱。别急,这篇保姆级教程,手把手带你理清流程,避免踩坑!…

📰

阜阳电工证快速拿证内部消息:别再被中介坑了,这才是正确姿势

阜阳电工证快速拿证内部消息:别再被中介坑了,这才是正确姿势 你是不是也在找阜阳电工证快速拿证的渠道,结果一搜全是中介电话,真假难辨?别急,这 内部消息…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬