HarmonyOS鸿蒙Next中父组件中的class属性如何和子组件的@Link同步
HarmonyOS鸿蒙Next中父组件中的class属性如何和子组件的@Link同步
父组件中使用@State
修饰了一个class,然后将class的一个属性传递给组件,子组件使用[@Link](/user/Link)
装饰,这样会异常,请问这种情况应该怎么做
4 回复
class Person{
name : string="";
age:number = 0
constructor(name:string,age:number) {
this.name = name;
this.age = age
}
}
// 父组件
@Component
struct ParentComponent {
@State person: Person = new Person('John', 30);
build() {
Column() {
ChildComponent({person:this.person})
}
}
}
// 子组件
@Component
struct ChildComponent {
@Link person: Person;
build() {
Column({space:15}) {
Text(`Name: ${this.person.name}`)
Text(`Age: ${this.person.age}`)
Button(`Increase Age`)
.onClick(() => {
this.person.age++; // 通过引用修改属性
})
}
.width("100%")
}
没发现什么异常 是不是没有传入参数那个地方写错了
更多关于HarmonyOS鸿蒙Next中父组件中的class属性如何和子组件的@Link同步的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,当父组件使用@State修饰的class属性需要通过@Link与子组件同步时,需要注意以下几点:
- @Link装饰器要求数据源必须是引用类型(如class实例),且需要父组件通过$符号传递引用:
// 父组件
[@State](/user/State) myClass: MyClass = new MyClass();
build() {
ChildComponent({ classRef: $myClass })
}
// 子组件
[@Link](/user/Link) classRef: MyClass
// 父组件
[@State](/user/State) myClass: MyClass = new MyClass();
build() {
ChildComponent({ propValue: myClass.someProperty })
}
// 子组件
[@Prop](/user/Prop) propValue: string
- 确保class是可观察的,建议使用@Observed装饰class:
[@Observed](/user/Observed)
class MyClass {
// 属性
}
- 如果确实需要双向绑定class的某个属性,可以考虑:
- 将整个class实例作为@Link传递
- 在子组件中修改属性后,通过方法通知父组件更新
出现异常通常是因为传递方式不正确或class未标记为@Observed。