一、基本概念
1. @Provide与@Consume:跨组件树双向同步
这对装饰器实现了任意层级组件间的双向数据绑定。@Provide在祖先组件中声明共享状态,@Consume在后代组件中消费该状态,形成类似"发布-订阅"的机制。其突破传统父子传参的限制,支持组件树中任意层级的通信。
- 自动广播机制:@Provide变量变更时,所有关联@Consume组件自动更新
- 别名匹配规则:支持通过相同变量名或别名建立绑定(如@Provide(‘count’)与@Consume(‘count’))
- 类型严格校验:要求@Provide与@Consume变量类型完全一致
- 支持
Object、Class、Array等复杂类型
2. @Observed与@ObjectLink:深度数据观察
这对装饰器专为解决嵌套对象/数组的深度监听问题而设计。传统@State只能感知对象引用的变化,而@Observed通过代理机制实现对类属性的细粒度观察,@ObjectLink则建立与父组件@Observed实例的双向绑定。
- 支持多层嵌套属性变更(如user.address.city)
- 支持
Map、Set等复杂数据结构(需API 11+) - 可观察数组元素的增删改操作, 数组操作需保持引用(如
this.order.items = [...this.order.items]) - 类对象属性的原子级更新触发UI刷新
- 原子同步:@ObjectLink建立与父组件@Observed实例的直接引用关系,避免整体对象替换的性能损耗
- 批量更新:使用
requestAnimationFrame合并多次属性修改,减少渲染次数 - 局部更新控制:通过
@Track标记需要观察的属性 - 惰性加载:对深层嵌套数据动态加载@Observed类,降低内存占用
- 精准监听:通过
@Track标记关键属性,避免全量更新(如仅监听user.name) - 避免混用装饰器:@Observed类不可与其他类装饰器(如@Serializable)共用

1973

被折叠的 条评论
为什么被折叠?



