HarmonyOS 事件触发相关?

现在有个发送消息场景:

父组件(创建与发送消息逻辑) --\> A子组件 --\> B子组件 --\> B-1子组 --\> C子组件

在A组件 B组件 C组件以及子组件的子组件B-1子组件中, 都需要触发到发送不同类型值去进行消息创建与发送消息逻辑,这个时候能选择的实现方式

①有接口一级一级回调②使用Emitter等。

通过接口传入感觉就很冗余,所以想问一下,能使用Emitter来通知父组件进行统一的消息处理和发送吗?

会不会有什么性能问题呢?有没有更加推荐的实现方式呢?

阅读 488
1 个回答

emitter没有限制事件队列,本身的消息处理能力与应用有关,当前场景应该不会出现性能问题。可以把接口传入的方法封装成工具类等进行调用。

LocalStorage可以实现页面级的UI状态存储,您看看是否能满足您的需求,参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-localstorage-V5\#%E6%A6%82%E8%BF%B0

可以看下eventHub能否满足需求,一般用于同一线程内。不同线程可以使用emitter,参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-eventhub-V5\#%E5%AF%BC%E5%85%A5%E6%A8%A1%E5%9D%97

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-emitter-V5\#emitteremit

1、eventHub使用上性能较优,可以替代provide/consume

2、实现对应需求,修改demo,具体为:page1到page2的方式改为router.replaceUrl,eventHub事件回调修改为箭头函数,例如:

eventFunc: (good: Good) => void = (good: Good) => { good.run() } 

另外,eventHub取消订阅时,需要指定具体回调,否则会取消该事件所有的事件订阅,参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-eventhub-V5\#eventhuboff

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏