OpenHarmony开发者论坛

标题: @State状态声明的变量发生改变后,子组件UI没有发生变化 [打印本页]

作者: xtaichi    时间: 2023-11-14 12:57
标题: @State状态声明的变量发生改变后,子组件UI没有发生变化
本帖最后由 hyacinth养花人 于 2023-11-14 14:17 编辑

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

[/md]
作者: westinyang    时间: 2023-11-14 14:33
[md]@State装饰器的作用只是在当前组件中,而你把title传递给了自定义的子组件,所以你需要使用 @Prop装饰器 装饰子组件TitleBar中的title变量,这样可以与父组件中的 @State title 建立单向同步,当然也可以使用 @Link 建立双向同步!

[/md]
作者: mean    时间: 2023-11-14 14:52
标题: @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. }
复制代码






欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5