概述

  • @Local:表示组件内部状态,可以对自定义组件中变量变化进行观测,当被@Local装饰的变量变化时,会刷新使用该变量的组件;
  • @Param:可以接受组件外部输入,还能接受@Local的同步变化,当被@Param装饰的变量变化时,会刷新该变量关联的组件;
  • @Event:为实现子组件向父组件请求更新@Param装饰变量的能力,使用@Event装饰器装饰回调方法并调用,可以实现更新数据源变量;
  • @Provider/@Consumer:用于跨组件层级数据双向同步,使开发者不必拘泥于组件层级;
  • @Computed:用于描述需要依赖于其他状态的计算逻辑,并将计算结果进行缓存。当相关依赖发生变化时,计算属性只会计算一次,从而提高性能和效率;
  • @Monitor:为了增强状态管理框架对状态变量变化的监听能力,开发者可使用@Monitor装饰器对状态变量进行监听;
  • @ObservedV2/@Trace:可以对类对象属性进行深度观测,增强对嵌套类属性变化的观测能力;

父子组件通信

简单来说,如何选择取决于你的开发场景:

通信需求 V1版本 (@Component) V2版本 (@ComponentV2) 适用场景
父传子 (单向) @Prop  @Prop (或 @Param )  展示数据,子组件内部可变但无需通知父组件。
父子双向绑定 @Link  @Event + 父组件状态  需要父子组件共享和修改同一份数据。
子传父 (通知) 回调函数  @Event (标准方式)  子组件触发父组件的某个行为,如表单提交、按钮点击。
跨层级传递 @Provide / @Consume  @Provide / @Consume  主题、用户信息等需要深层传递的数据。

兄弟组件通信

在鸿蒙(ArkUI)开发中,兄弟组件之间无法直接通信,因为它们没有直接的依赖关系。要实现这个目的,主要有三种优雅的方式:状态提升 (通过父组件)、事件总线 (EventHub / Emitter)、和应用级状态管理(AppStorage / LocalStorage)。

V1/V2状态管理选型

为什么很多开发者还没用上状态管理V2?

开发者们对V2持观望态度,并非无的放矢,主要出于以下现实考量:

  1. 高昂的存量项目迁移成本:在鸿蒙NEXT(API 12+)之前,大量已上线的应用都是基于V1开发的,如果为了使用V2而对整个应用进行重构,无异于重新开发,风险高、周期长。

  2. V2生态尚在完善,存在功能缺口:官方明确指出,在一些特定场景下(动画效果、高级组件、@Reusable(组件复用)和 @WithTheme(主题切换)),目前仍需依赖V1,网址参考:V1和V2可以混用吗

  3. V1与V2混用带来的复杂性:开发者反馈,相关文档概念繁多,限制条件复杂(如 @ObservedV2 的类实例不能用 JSON.stringify 序列化,且不能和V1的 @State 混用)。

简单来说,“不熟、不敢、不会”——对V2不熟悉,不敢在核心项目上冒险,又担心混用搞出问题,共同导致了目前V2普及度不高的现状。

如何在V1和V2之间做选型?

选型的关键,在于认清你的项目阶段和核心诉求。下面的选型指南可以帮助你快速决策:

核心场景 推荐方案 核心原因
全新项目(API 12+) 首选 V2 面向未来,享受技术红利。V2的设计更先进,能从根本上避免V1中常见的复杂嵌套和性能问题,让代码更简洁、更健壮。
已有V1存量项目 保持 V1,或渐进式迁移 稳定第一。没有强烈需求(如性能瓶颈)不建议大规模重构。可以将V1和V2视为两套独立的体系,只在新开发的页面或模块中采用V2,实现平滑过渡。
深层嵌套对象监听 使用 V2(或混用) V1处理多层对象需要层层传递 @ObjectLink,代码极其冗余。V2的 @ObservedV2 和 @Trace 可以直接观测到对象内部属性的变化,代码量大幅减少,可维护性显著提升。
复杂动画交互 推荐 V1 官方明确指出,在V2中使用 animateTo 可能出现动画效果异常。为了动画的稳定和可控,建议继续使用V1。
需要精确监听和计算 使用 V2 V2的 @Monitor 可以监听对象中特定属性的变化,并能获取变化前后的值,比V1的 @Watch 强大得多。@Computed 计算属性也能自动缓存计算结果,避免重复计算带来的性能损耗。
追求严格的组件封装 使用 V2 V2将状态职责拆分得更清晰:@Local(组件内部状态,不可外部改)、@Param(外部传入)、@Event(向外传递事件)。这种设计让组件的接口更规范,数据流向一目了然,非常适合构建高质量的自定义组件库。

总结

选择V1还是V2,本质上是在“稳定”与“先进”之间做权衡。

  • 如果你的项目正从零开始,或者准备开发一个独立的新模块,请毫不犹豫地选择V2。 它代表了鸿蒙状态管理的未来,能让你写出更优雅、更高效的代码。

  • 如果你的项目庞大且基于V1稳定运行,则不必急于全盘迁移。 可以采取“农村包围城市”的策略,在老项目中开辟V2的“试验田”,逐步探索和积累经验。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐