HarmonyOS 事件传递最佳实践咨询

  1. 点击事件在兄弟组件、或父组间触发,子组件消费的场景,是否有最佳实践;
  2. 父组间分发给子组件的事件(比如 page 的 back),如果父组间需要返回值,有没有什么好的做法?
HarmonyOS
2024-12-20 16:29:56
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

父子组件间双向通信可参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-component-state-management-V5

父组件调用子组件方法,

参考demo:

@Component
struct Child {
  @State private text: string = ‘初始值’
  private controller: ChildController = new ChildController();

  aboutToAppear() {
    if(this.controller) {
      this.controller.changeText = this.changeText
    }
    console.log(‘aaa’)
  }

  private changeText = (value: string) =>{
    this.text = value
    console.log(‘bbb’)
  }

  build() {
    Column() {
      Text(this.text)
    }
  }
}

class ChildController {
  changeText = (value: string) => {
    console.log(‘11111’)
  }
}

export let ChildRef = new ChildController()

@Entry
@Component
struct Parent {
  // ChildRef = new ChildController()
  @State noShow: boolean = false
  build() {
    Column() {
      Text(‘获取Child的exposeMethods!’).fontSize(‘18vp’).fontColor(Color.Gray)
      Divider()
      Child({ controller: ChildRef })
      Child()
      Button(‘Parent调用childer的changeText’).onClick(() => {
        ChildRef.changeText(‘Parent调用childer的changeText’)
      })
    }
  }
}

子组件调用父组件方法可参考demo:
@Entry
@Component
struct Index {
  @State message: string = ‘Hello World’;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Child({
          onClickOK: (): void => {
            console.log(‘test’)
          }
        })

      }
      .width(‘100%’)
    }
    .height(‘100%’)
  }
}

@Component
struct Child {
  onClickOK?: () => void;

  build() {
    Row() {
      Column() {
        Button(‘事件’)
        .onClick(()=>{
          if (this.onClickOK !== undefined) {
            this.onClickOK()
          }
        })
      }
      .width(‘100%’)
    }
    .height(‘100%’)
  }
}
分享
微博
QQ
微信
回复
2024-12-20 18:05:15
相关问题
HarmonyOS jsBridge 最佳实践
702浏览 • 1回复 待解决
HarmonyOS 应用开发ArkUI布局最佳实践
440浏览 • 1回复 待解决
HarmonyOS 沉浸式状态栏最佳实践
526浏览 • 1回复 待解决
网络监听的最佳实践有哪些?
924浏览 • 1回复 待解决
应用内整体换肤的最佳实践
1034浏览 • 1回复 待解决
web写入customUseragent最佳实践
712浏览 • 1回复 待解决
HarmonyOS 关于音频播放器的最佳实践
436浏览 • 1回复 待解决
HarmonyOS ts和ets相互引用的最佳实践
381浏览 • 1回复 待解决
视频和直播播放HarmonyOS最佳实践
1477浏览 • 1回复 待解决
输出静态库的最佳实践
698浏览 • 1回复 待解决
HarmonyOS 单列和瀑布流的最佳实践
716浏览 • 1回复 待解决
APP内整体置灰的最佳实践
688浏览 • 1回复 待解决