写 ArkUI 应用,最常打交道的就是状态管理。状态一变界面自动更新,这个机制让 UI 开发变得简单,但也要求你理解不同状态装饰器的适用场景。
@State:组件内部状态
@State 声明组件内部的状态变量:值变化时,使用该变量的 UI 自动刷新。它只能被组件自身修改,是“私有状态”。
典型用法:计数器、输入框内容、开关状态。注意:@State 修饰的是响应式变量,修改要整体赋值(如 this.count = 1),不要直接改对象内部属性而不替换引用。

@Prop:单向传值
父组件把数据传给子组件展示,用 @Prop:子组件可以读,但修改不会同步回父组件(单向数据流)。@Prop 适合“只展示、不改”的场景。
使用注意:@Prop 变量在子组件里是本地拷贝,父组件值变化时子组件会同步更新。
@Link:双向同步
子组件需要修改父组件的状态(比如表单编辑、开关切换),用 @Link:父子变量建立双向绑定,任一侧修改,另一侧同步。
@Link 的使用要求严格:父组件必须传 @State 变量,不能传普通变量或常量。

@Provide/@Consume:跨层级共享
祖先组件和深层后代组件共享状态,用 @Provide(提供者)+ @Consume(消费者):不需要层层传参,后代组件直接声明 @Consume 就能拿到。
适合全局性的状态:用户信息、主题色、登录状态。类似 React 的 Context。
状态设计建议
状态越少越好:能本地化的不全局化,能单向的不双向。状态变量要控制粒度,避免一个变量牵扯一片界面。复杂应用可以考虑引入全局状态管理方案。
理解状态,就理解了 ArkUI 的一半。从 @State 起步,按需引入 @Prop、@Link 和 @Provide,状态用得清晰,应用自然稳定。