赞
踩
@State | 说明 |
---|---|
装饰器参数 | 无 |
功能 | 装饰的变量拥有其所属组件的状态, 可以作为其子组件单向和双向同步的数据源。 当其数值改变时,会引起相关组件的渲染刷新。 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
与父组件的同步类型 | 不与父组件中任何类型的变量同步。 |
与子组件的同步类型 | 与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link、@ObjectLink装饰变量之间建立双向数据同步 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 必须指定。 |
注意 | 类型必须被指定。 不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。 建议不要装饰Date类型,应用可能会产生异常行为。 不支持Length、ResourceStr、ResourceColor类型,Length、ResourceStr、ResourceColor为简单类型和复杂类型的联合类型。 |
初始化 | 可选,从父组件初始化或者本地初始化。如果从父组件初始化将会覆盖本地初始化。 |
支持父组件中常规变量初始化 | @State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp装饰的变量,初始化子组件的@State。 |
用于初始化子组件 | @State装饰的变量支持初始化子组件的常规变量、@State、@Link、@Prop、@Provide。 |
@Link | 说明 |
---|---|
装饰器参数 | 无 |
功能 | 装饰的变量与其父组件中对应的数据源建立双向数据绑定,共享相同的值。 |
限制 | @Link装饰器不能在@Entry装饰的自定义组件中使用 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
与父组件的同步类型 | 与父组件@State, @StorageLink和@Link 建立双向绑定。 |
与子组件的同步类型 | 与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link装饰变量之间建立双向数据同步 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 禁止本地初始化。 |
注意 | 类型必须被指定,且和双向绑定状态变量的类型相同。 不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。 不支持Length、ResourceStr、ResourceColor类型,Length、ResourceStr、ResourceColor为简单类型和复杂类型的联合类型。 |
初始化 | 从父组件初始化。 |
支持父组件中常规变量初始化 | @State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp装饰变量初始化子组件@Link。 |
用于初始化子组件 | 可用于初始化常规变量、@State、@Link、@Prop、@Provide。 |
@Prop | 说明 |
---|---|
装饰器参数 | 无 |
功能 | 装饰的变量可以和父组件建立单向的同步关系 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
与父组件的同步类型 | 父组件状态变量值的修改,将同步给子组件@Prop装饰的变量,@Prop装饰的相关变量值将被覆盖。。 变量的修改不会同步到父组件的状态变量上 |
与子组件的同步类型 | 与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link装饰变量之间建立双向数据同步 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | string、number、boolean、enum类型。 |
被装饰变量的初始值 | 允许本地初始化。 |
注意 | 类型必须被指定。 不支持any,不允许使用undefined和null。 在父组件中,传递给@Prop装饰的值不能为undefined或者null。 @Prop和数据源类型需要相同。 |
初始化 | 如果本地有初始化,则是可选的。没有的话,则必选。 |
支持父组件中常规变量初始化 | 常规变量、@State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp去初始化子组件中的@Prop变量。 |
用于初始化子组件 | 支持去初始化子组件中的常规变量、@State、@Link、@Prop、@Provide。 |
@Provide | 说明:@State的规则同样适用于@Provide,差异为@Provide还作为多层后代的同步源。 |
---|---|
装饰器参数 | 别名:常量字符串,可选。 如果指定了别名,则通过别名来绑定变量; 如果未指定别名,则通过变量名绑定变量。 |
功能 | @Provide和@Consume配合,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景,实现跨层级传递。 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
同步类型 | 双向同步。 从@Provide变量到所有@Consume变量以及相反的方向的数据同步。双向同步的操作与@State和@Link的组合相同。 不与父组件数据同步 只和@Consume双向同步 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 必须指定。 |
注意 | 类型必须被指定。@Provide变量的@Consume变量的类型必须相同。 不允许在同一个自定义组件内,包括其子组件中声明多个同名或者同别名的@Provide装饰的变量。 不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。 不支持Length、ResourceStr、ResourceColor类型,Length、ResourceStr、ResourceColor为简单类型和复杂类型的联合类型。 |
初始化 | 必须本地初始化 |
支持父组件中常规变量更新 | 允许父组件中常规变量、@State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp装饰的变量装饰变量更新绑定子组件@Provide。 |
用于初始化子组件 | 可用于初始化@State、@Link、@Prop、@Provide。 |
@Consume | 说明 |
---|---|
装饰器参数 | 别名:常量字符串,可选。 如果提供了别名,则必须有@Provide的变量和其有相同的别名才可以匹配成功;否则,则需要变量名相同才能匹配成功。 |
功能 | @Consume装饰的变量是在后代组件中,去“消费(绑定)”祖先节点(@Provide)提供的变量。 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
同步类型 | 双向同步。 从@Provide变量到所有@Consume变量以及相反的方向的数据同步。双向同步的操作与@State和@Link的组合相同。 和@Provide双向同步。 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 禁止本地初始化。 |
注意 | 类型必须被指定。@Provide变量的@Consume变量的类型必须相同。 @Consume装饰的变量,在其父节点或者祖先节点上,必须有对应的属性和别名的@Provide装饰的变量。 不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。 不支持Length、ResourceStr、ResourceColor类型,Length、ResourceStr、ResourceColor为简单类型和复杂类型的联合类型。 |
初始化 | 禁止本地初始化 |
支持父组件中常规变量初始化/更新 | 禁止。通过相同的变量名和alias(别名)从@Provide初始化。 |
用于初始化子组件 | 可用于初始化@State、@Link、@Prop、@Provide。 |
@Observed/@ObjectLink | 说明:@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步 |
---|---|
装饰器参数 | 无 |
@Observed | 说明 |
类装饰器 | 只能装饰Class,需要放在class的定义前,使用时需使用new创建类对象。 |
功能 | 被@Observed装饰的类,可以被观察到属性的变化. 单独使用@Observed是没有任何作用的,需要搭配@ObjectLink或者@Prop使用 |
注意 | 使用@Observed装饰class会改变class原始的原型链,@Observed和其他类装饰器装饰同一个class可能会带来问题。 |
@ObjectLink | 说明 |
同步类型 | 不与父组件中的任何类型同步变量 |
允许装饰的变量类型 | 必须为被@Observed装饰的class实例,必须指定类型。不支持简单类型, |
被装饰变量的初始值 | 禁止指定 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
初始化 | 禁止本地初始化 |
特性 | @ObjectLink装饰变量是只读的,不能被改变。只能从数据源处改变 |
从父组件初始化 | 必须指定。 初始化@ObjectLink装饰的变量必须同时满足以下场景: 类型必须是@Observed装饰的class。 初始化的数值需要是数组项,或者class的属性。 同步源的class或者数组必须是@State,@Link,@Provide,@Consume或者@ObjectLink装饰的数据。 |
与源对象同步 | 同步数据源的修改 |
可以初始化子组件 | 可用于初始化常规变量、@State、@Link、@Prop、@Provide |
@Watch | 说明 |
---|---|
装饰器参数 | 必填。常量字符串,字符串需要有引号。是(string) => void自定义成员函数的方法的引用。 |
可装饰的自定义组件变量 | 可监听所有装饰器装饰的状态变量。不允许监听常规变量。 |
装饰器的顺序 | 建议@State、@Prop、@Link等装饰器在@Watch装饰器之前。 |
可装饰的自定义组件变量 | 可监听所有装饰器装饰的状态变量。不允许监听常规变量。 |
限制 | 避免无限循环,建议不要在@Watch的回调方法里修改当前装饰的状态变量。 属性值更新函数会延迟组件的重新渲染,因此,回调函数应仅执行快速运算 不建议在@Watch函数中调用async await |
注意 | 在第一次初始化的时候,@Watch装饰的方法不会被调用,即认为初始化不是状态变量的改变 如果在@Watch的方法里改变了其他的状态变量,也会引起状态变更和@Watch的执行 @Watch方法在自定义组件的属性变更之后同步执行 |
@Component
struct TotalView {
@Prop @Watch('onCountUpdated') count: number;
@State total: number = 0;
// @Watch 回调
onCountUpdated(propName: string): void {
this.total += this.count;
}
build() {
Text(`Total: ${this.total}`)
}
}
// xxx.ets @Entry @Component struct RefreshExample { @State isRefreshing: boolean = false @State counter: number = 0 build() { Column() { Text('Pull Down and isRefreshing: ' + this.isRefreshing) .fontSize(30) .margin(10) Refresh({ refreshing: $$this.isRefreshing, offset: 120, friction: 100 }) { Text('Pull Down and refresh: ' + this.counter) .fontSize(30) .margin(10) } .onStateChange((refreshStatus: RefreshStatus) => { console.info('Refresh onStatueChange state is ' + refreshStatus) }) } } }
@LocalStorageProp | 说明 |
---|---|
装饰器参数 | key:常量字符串,必填(字符串需要有引号)。 |
功能 | 和LocalStorage中key对应的属性建立单向数据同步 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 必须指定。如果LocalStorage实例中不存在属性,则作为初始化默认值,并存入LocalStorage中。 |
注意 | 类型必须被指定,且必须和LocalStorage中对应属性相同。 不支持any,不允许使用undefined和null。 |
初始化 | 禁止,@LocalStorageProp不支持从父节点初始化,只能从LocalStorage中key对应的属性初始化,如果没有对应key的话,将使用本地默认值初始化。 |
初始化子节点 | 可用于初始化@State、@Link、@Prop、@Provide。 |
同步类型 | 单向同步:从LocalStorage的对应属性到组件的状态变量。组件本地的修改是允许的,但是LocalStorage中给定的属性一旦发生变化,将覆盖本地的修改 |
@LocalStorageLink | 说明 |
---|---|
装饰器参数 | key:常量字符串,必填(字符串需要有引号)。 |
功能 | 和LocalStorage中key对应的属性建立双向数据同步 |
可见性 | 私有,仅所属组件可见。不支持组件外访问,只能在组件内访问。 |
变量生命周期 | 变量生命周期与其所属自定义组件的生命周期相同。 |
允许装饰的变量类型 | Object、class、string、number、boolean、enum类型,以及这些类型的数组。 |
被装饰变量的初始值 | 必须指定。如果LocalStorage实例中不存在属性,则作为初始化默认值,并存入LocalStorage中。 |
注意 | 类型必须被指定,且必须和LocalStorage中对应属性相同。 不支持any,不允许使用undefined和null。 |
初始化 | 禁止,@LocalStorageProp不支持从父节点初始化,只能从LocalStorage中key对应的属性初始化,如果没有对应key的话,将使用本地默认值初始化。 |
初始化子节点 | 可用于初始化@State、@Link、@Prop、@Provide。 |
同步类型 | 双向同步:从LocalStorage的对应属性到自定义组件,从自定义组件到LocalStorage对应属性。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。