HarmonyOS @ObjectLink和@State的相关疑问

子组件使用@ObjectLink接收来自父组件中用@State 修饰的@Observed的嵌套变量对象,当该对象的嵌套对象属性发生修改时子组件无法刷新UI

demo:

@Observed  
class Model {  
  a: A  
  constructor(a: A) {  
    this.a = a  
  }  
}  
  
@Observed  
class A {  
  str: string  
  constructor(str: string) {  
    this.str = str  
  }  
}  
  
@Component  
struct MyView {  
  @ObjectLink objLink: Model  
  build() {  
    Text(`MyView ${this.objLink.a.str}`)  
  }  
}  
  
@Entry  
@Component  
struct Index {  
  @State model: Model = new Model(new A("b"))  
  build() {  
    Column({ space: 20 }) {  
      MyView({ objLink: this.model})  
      Button("Click")  
        .onClick(() => {  
          this.model.a.str = "d"  
        })  
    }  
    .width("100%")  
    .height("100%")  
  }  
}
HarmonyOS
2024-10-24 13:12:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

1.当前您demo里面传入到ChatItemView里面的是Chat,那你观测的只是Chat,Chat下面的嵌套对象user是观测不到的。

2.ChatItemView子组件正确传入的是user: this.chat.user,从而子组件观测的就是user。

@Observed  
class Chat {  
  user: User  
  content:string  
  constructor(user: User, content:string) {  
    this.user = user  
    this.content = content  
  }  
}  
  
@Observed  
class User {  
  avatar: string  
  
  constructor(str: string) {  
    this.avatar = str  
  }  
}  
  
@Component  
struct ChatItemView {  
  @ObjectLink user: User  
  @ObjectLink chat: Chat  
  build() {  
    Column() {  
      Text(`ChatItemView ${this.user.avatar}`)  
      Text(`ChatItemView ${this.chat.content}`)  
      Button("Click")  
        .onClick(() => {  
          this.user.avatar = "http:sxxxxxxx"  
          this.chat.content= '变化了'  
        })  
    }  
  }  
}  
   
@Entry  
@Component  
struct Index {  
  @State chat: Chat = new Chat(new User("http:sxxxx"),'试试看')  
  
  build() {  
    Column({ space: 20 }) {  
      ChatItemView({ user: this.chat.user,chat:this.chat})  
      Button("Click")  
        .onClick(() => {  
          this.chat.user.avatar = "http:sx"  
          // this.chat.content= '变化了'  
        })  
    }  
    .width("100%")  
    .height("100%")  
  }  
}
分享
微博
QQ
微信
回复
2024-10-24 15:11:33
相关问题
ObserveObjectLink 使用
198浏览 • 1回复 待解决
HarmonyOS 关于deliveryWithInstall疑问
503浏览 • 1回复 待解决
HarmonyOS关于RichText疑问
671浏览 • 1回复 待解决
HarmonyOS 企业证书疑问
48浏览 • 1回复 待解决
HarmonyOS使用@ObjectLink 数据不刷新
571浏览 • 2回复 待解决
HarmonyOS 关于手动签名疑问
369浏览 • 1回复 待解决
HarmonyOS V2 @ObjectLink?
62浏览 • 0回复 待解决
ssd1306 oled屏显示ascii字符汉字疑问
12179浏览 • 1回复 待解决
HarmonyOS TextInput键盘相关问题咨询
432浏览 • 1回复 待解决
HarmonyOS " @State可以修饰ArrayList吗"
297浏览 • 1回复 待解决
HarmonyOS 应用相机开发疑问
86浏览 • 1回复 待解决
HarmonyOS 关于ArkTS UI样式文件疑问
266浏览 • 1回复 待解决
HarmonyOS 使用Navigation一些疑问
213浏览 • 1回复 待解决
mysql varchar类型疑问
2212浏览 • 1回复 待解决