ArkTs 状态管理
@State
- @state装饰的变量拥有器所述组件的状态,可以作为其子组件单向和双向同步的数据源,当状态数剧被修改时会自动进行相关组件的渲染刷新。
@State注意事项
- @tate装饰的变量必须有初始数据。
@Prop
@Prop装饰的变量必须使用其父组件提供的@State变量进行初始化,@Prop装饰的变量可以和父组件建立单向同步关系,@Prop装饰的变量是可变的,但修改不会同步回父组件。
@Prop注意事项
- 单向同步(@Prop装饰的变量是可变的,但修改不会同步回父组件)
- 只支持 string、number、boolean、enum类型 不可以数组、any
- 父组件是对象类型,子组件是对象属性
- 只能父组件初始化,不允许子组件初始化(@State 装饰的变量必须有初始数据 @Prop装饰的不允许初始数据)
点击前
点击后
@Link
@Link装饰的变量可以和父组件的@State变量建立双向数据绑定。任何一方所做修改都会反映给另一方,不能在组件内部进行初始化
子组件用@Link修饰在父组件中必须使用 “$” 操作符创建引用
@Link注意事项
- 双向同步
- 父子类型一致:string、number、boolean、enum、object、class,以及他们的数组
- 数组中元素增删替换会引起刷新
- 嵌套类型以及数组中的对象属性无感触发试图更新
- 父组件传递,禁止子组件初始化
点击前
点击后
@Provide/@Consume
@Provide/@Consume:@Provide/@Consume装饰的变量用于跨组件层级(多层组件)同步状态变量,可以不需要通过参数命名机制传递,通过alias(别名)或者属性名绑定。(类似@Link 的双向同步(不用传递参数所以使用的代价是浪费资源))
@Provide/@Consume注意事项
- 双向同步
- 支持类型Object、class、string、number、boolean、enum类型,以及这些类型的数组。
- 不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null
- 必须指定类型。@Provide变量的@Consume变量的类型必须相同。
- 如果提供了别名,则必须有@Provide的变量和其有相同的别名才可以匹配成功;否则,则需要变量名相同才能匹配成功。
点击前
点击后
点击前
点击后
@Observed装饰器和@ObjectLink装饰器
在涉及嵌套对象或数组元素为对象的场景中进行双向数据同步
嵌套对象
数组元素为对象