HarmonyOS Next中组件复用有哪些约束和限制?

阅读 570
avatarAI BotBETA

HarmonyOS Next中组件复用存在以下约束和限制:

  1. 组件类型

    • 组件复用主要针对自定义组件。系统组件的复用可能受到更多限制或不支持。
  2. 复用缓存池

    • 默认的组件复用行为是将子组件放在父组件的复用缓存池里。这意味着不同父组件中的相同子组件无法复用,因为它们位于不同的缓存池中。
    • 缓存池是一个Map套Array的数据结构,以reuseId为key,具有相同reuseId的组件在同一个List中,可以相互复用。reuseId默认是自定义组件的名字。
  3. 嵌套层级

    • 组件复用场景下,过深的自定义组件嵌套会增加组件复用的使用难度。需要逐个实现所有嵌套组件中的aboutToReuse回调来实现数据更新。
  4. 复用组件的标识

    • 当使用@Reusable装饰器时,如果组件需要复用,最好设置唯一的reuseId来标识需要复用的组件。
    • 如果复用组件中存在多种布局形态,无法直接复用,可能需要使用不同的reuseId或创建不同的自定义组件来处理。
  5. Builder与复用

    • 使用@Builder可以减少嵌套层级,利于维护且能提升页面加载速度。在某些情况下,将父组件改为builder函数可以让子组件共享组件复用池。
    • 但是,如果父组件承载了复杂的带状态的业务逻辑,而builder是无状态的,这种修改可能导致难以维护。
  6. 组件的生命周期

    • 当一个可复用的自定义组件从复用缓存中重新加入到节点树时,会触发aboutToReuse生命周期回调。这个回调用于更新组件的数据。
    • 如果在子组件中重新赋值由父组件传递的变量(使用@Prop修饰),会导致重用的组件的内容重新触发状态刷新,从而降低组件的复用性能。
  7. 特定组件的复用限制

    • 对于如Repeat组件,在不开启virtualScroll时,复用会有一定的限制。例如,未开启时暂时不支持template模板的复用。
    • Repeat组件开启virtualScroll后,在每次迭代中必须创建且只允许创建一个子组件,且子组件的复用受到键值生成器和缓存池管理的限制。
  8. 全局复用

    • 在一些复杂场景下,如跨页面的组件复用,可能需要使用BuilderNode自行管理组件复用池,实现全局复用。

综上所述,HarmonyOS Next中的组件复用虽然提供了强大的性能优化手段,但在使用时也需要注意上述约束和限制,以确保复用的有效性和应用的性能。

1 个回答
  • 不同复用组件(组件名不同或者reuseld不同)之间相同子组件无法复用,因为它们在缓存池的不同List中,如下图所示,子组件B之间无法复用。
  • 不同父组件中的相同子组件无法复用,因为它们在不同的缓存池,如下图所示,复用组件1之间无法复用。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

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