• Lv0
    粉丝0

积分52 / 贡献0

提问3答案被采纳0文章0

@State状态声明的变量发生改变后,子组件UI没有发生变化

xtaichi 显示全部楼层 发表于 2023-11-14 12:57:31

本帖最后由 hyacinth养花人 于 2023-11-14 14:17 编辑

页面内写了一个webview组件和一个自定义的TitleBar组件,@State的title传递给TitleBar显示,当网页加载完成后,回调onTitleReceive,给@State的title赋值,但是UI没有更新,请问是什么问题呢?

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

westinyang

沙发 发表于 2023-11-14 14:33:14

@State装饰器的作用只是在当前组件中,而你把title传递给了自定义的子组件,所以你需要使用 @Prop装饰器 装饰子组件TitleBar中的title变量,这样可以与父组件中的 @State title 建立单向同步,当然也可以使用 @Link 建立双向同步!

mean

板凳 发表于 2023-11-14 14:52:35

@State状态声明的变量发生改变后,子组件UI没有发生变化

双向绑定应该使用@Link
  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'

  3. @Entry
  4. @Component
  5. struct WebComponent {
  6.   controller: web_webview.WebviewController = new web_webview.WebviewController();
  7.   @State title: string = '标题'

  8.   build() {
  9.     Column() {
  10.       TitleBar({title: this.title})

  11.       Web({ src: 'www.openharmony.cn', controller: this.controller })
  12.         .onTitleReceive((event) => {
  13.           this.title = event.title
  14.         })
  15.     }
  16.   }
  17. }

  18. @Component
  19. struct TitleBar{
  20.   @Link title:string;
  21.   build(){
  22.    Column(){
  23.      Text(this.title)
  24.        .fontSize(30)
  25.    }
  26.     .width('100%')
  27.     .height(50)
  28.     .backgroundColor('#f7f8fa')
  29.     .padding({top: 10, bottom: 10})
  30.   }
  31. }
复制代码

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部