HarmonyOS 通过向子组件传递builder时,组件复用没有生效
class MyDataSource implements IDataSource {
  private data: number[] = []
  constructor() {
    for (let i = 0; i < 100000; i++) {
      this.data.push(i)
    }
  }
  totalCount(): number {
    return this.data.length
  }
  getData(index: number): number {
    return this.data[index]
  }
  registerDataChangeListener(listener: DataChangeListener): void {
  }
  unregisterDataChangeListener(listener: DataChangeListener): void {
  }
}
@Entry
@Component
struct Index {
  @Builder
  private itemContent(item: number) {
    Item()
  }
  build() {
    Stack() {
      A({
        // 可以触发item()组件复用, 但是使用了@Provide装饰器会报错
        // itemContent: (item, index): void => this.itemContent(item)
        // @Provide装饰器不报错,但是无法触发item()组件复用逻辑
        itemContent: this.itemContent
      })
        .width('100%')
        .height('100%')
    }
    .width('100%')
    .height('100%')
  }
}
@Component
struct A {
  @BuilderParam
  itemContent: (item: number, index: number) => void
  build() {
    List() {
      LazyForEach(new MyDataSource(), (item: number, index) => EzListItemViewWrapper({
        itemContent: this.itemContent,
        item: item,
        index: index
      }), (item: number, index) => `${item}`)
    }
    .width('100%')
    .height('100%')
  }
}
@Component
export struct EzListItemViewWrapper {
  @BuilderParam itemContent: (item: number, index: number) => void
  item?: number
  index?: number
  @Provide parentValue: number = 1
  build() {
    this.itemContent(this.item!, this.index!)
  }
}
@Component
@Reusable
struct Item {
  // 当使用下面这种形式传参时,会报crash。itemContent: (item, index): void => this.itemContent(item)
  @Consume parentValue: number
  aboutToReuse(params: ESObject): void {
    console.log("TestReuse: aboutToReuse")
  }
  build() {
    Text("TTT").width('100%').height(90)
  }
}
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS  @Prop同步给子组件的数据如何通过@Builder传递? 
1043浏览  • 1回复 待解决
HarmonyOS  给web组件设置expandSafeArea没有生效 
1718浏览  • 1回复 待解决
HarmonyOS popup组件placement设置top没有生效 
1101浏览  • 1回复 待解决
通过Web组件的.darkMode(WebDarkMode.On)方式设置为深色模式没有生效。 
1260浏览  • 1回复 待解决
HarmonyOS 子组件如何向父组件单向传递状态变量值 
801浏览  • 1回复 待解决
HarmonyOS 创建子窗口时,如何向子窗口传递页面参数 
1393浏览  • 1回复 待解决
Select组件的设置.optionWidth("50vp")没有生效 
1748浏览  • 1回复 待解决
HarmonyOS 代码混淆配置没有生效 
1030浏览  • 1回复 待解决
为什么设置了Web组件的深色模式但是没有生效? 
2041浏览  • 1回复 待解决
HarmonyOS 如何通过变量将@Builder修饰的自定义view传递到子组件中? 
1023浏览  • 1回复 待解决
HarmonyOS list控件子组件复用 
1584浏览  • 1回复 待解决
HarmonyOS badge 子组件是自定义组件时不生效 
1350浏览  • 1回复 待解决
组件复用生效的条件有哪些? 
1170浏览  • 1回复 待解决
HarmonyOS 如何知道组件复用是否生效 
1741浏览  • 1回复 待解决
harmony页面开发父组件如何传递事件方法给子组件,通过子组件可以进行回调反馈? 
2515浏览  • 2回复 待解决
父组件给子组件传递函数 
1288浏览  • 1回复 待解决
HarmonyOS 获取系统时间戳没有生效 
1420浏览  • 1回复 待解决
HarmonyOS 使用 expandSafeArea 控制组件扩展到安全区域,没有生效 
2018浏览  • 1回复 待解决
HarmonyOS  通过属性来传递组件 
824浏览  • 1回复 待解决
HarmonyOS  使用@ObservedV2的类,无法从父组件通过构造函数传递给子组件 
1233浏览  • 1回复 待解决
HarmonyOS 自定义组件父组件如何给子组件传递数据 
1189浏览  • 1回复 待解决
HarmonyOS 父组件向子组件传的值,在子组件的哪个环节(生命周期)可以拿到 
867浏览  • 1回复 待解决
HarmonyOS 事件能从父组件传递到子组件吗 
954浏览  • 1回复 待解决
HarmonyOS PixelMap类型无法从父组件传递给子组件 
994浏览  • 1回复 待解决
HarmonyOS AVSession设置setAVPlaybackState正常,音频时长和进度没有生效 
1553浏览  • 1回复 待解决





















@Provide使用不规范造成的,@Provide的定义应该在@Consume的祖先组件中,出问题的场景,@Provide和@Consume没有父子关系,导致@Consume初始化找不到@Provide