1.@State
2.@Prop 装饰的变量不允许本地初始化,只能通过父组件向子组件传参进行初始化
// 父组件
@Entry
@Component
struct Parent {
@state count: number = 1
build(){
column(){
Child({ count: this.count })
}
}
}
// 子组件
@Component
export struct Child{
@Prop count:number;
build(){
column(){
Text(this.count.toString())
}
}
}
3.@Link 装饰的变量不允许本地初始化,只能由父组件通过传参进行初始化,并且父组件必须使用$变量名 的方式传参,以表示传递的是变量的引用
// 父组件
@Entry
@Component
struct Parent {
@state count: number = 1
build(){
column(){
Child({ count: $count })
}
}
}
// 子组件
@Component
struct Child{
@Link count:number;
build(){
column(){
Text(this.count.toString())
}
}
}
4. @Provide 装饰变量必须进行本地初始化,而 @consume 装饰的变量不允许进行本地初始化。另外,@provide和 @consume 装饰的变量不是通过父组件向子组件传参的方式进行绑定的,而是通过相同的变量名进行绑定的。
// 祖先组件
@Entry
@Component
struct GrandParent {
@Provide count:number =1;
build(){
column(){
Parent()
}
}
}
// 父组件
@Component
struct Parent {
build(){
column(){
Child()
}
}
}
// 子组件
@Component
struct Child{
@Consume count:number;
build(){
column(){
Text(this.count.toString())
}
}
}
当 @state, @Prop,@Link,@Provide ,装饰的变量类型为数组时,可以观察到数组本身赋值的变化,和其元素的添加、删除及更新的变化,若元素类型为 clas 或者 object 时,元素属性的变化,是观察不到的