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)
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
HarmonyOS
赞
收藏 0
回答 1
相关问题
HarmonyOS @Prop同步给子组件的数据如何通过@Builder传递?
710浏览 • 1回复 待解决
HarmonyOS 给web组件设置expandSafeArea没有生效
1150浏览 • 1回复 待解决
HarmonyOS popup组件placement设置top没有生效
812浏览 • 1回复 待解决
通过Web组件的.darkMode(WebDarkMode.On)方式设置为深色模式没有生效。
1016浏览 • 1回复 待解决
Select组件的设置.optionWidth("50vp")没有生效
1204浏览 • 1回复 待解决
HarmonyOS 子组件如何向父组件单向传递状态变量值
496浏览 • 1回复 待解决
HarmonyOS 创建子窗口时,如何向子窗口传递页面参数
1032浏览 • 1回复 待解决
HarmonyOS 如何通过变量将@Builder修饰的自定义view传递到子组件中?
745浏览 • 1回复 待解决
HarmonyOS 代码混淆配置没有生效
781浏览 • 1回复 待解决
为什么设置了Web组件的深色模式但是没有生效?
1471浏览 • 1回复 待解决
HarmonyOS list控件子组件复用
1228浏览 • 1回复 待解决
HarmonyOS badge 子组件是自定义组件时不生效
1028浏览 • 1回复 待解决
组件复用生效的条件有哪些?
908浏览 • 1回复 待解决
HarmonyOS 如何知道组件复用是否生效
1109浏览 • 1回复 待解决
HarmonyOS 获取系统时间戳没有生效
1141浏览 • 1回复 待解决
harmony页面开发父组件如何传递事件方法给子组件,通过子组件可以进行回调反馈?
1805浏览 • 2回复 待解决
HarmonyOS 使用 expandSafeArea 控制组件扩展到安全区域,没有生效
1596浏览 • 1回复 待解决
父组件给子组件传递函数
1017浏览 • 1回复 待解决
HarmonyOS 通过属性来传递组件
582浏览 • 1回复 待解决
HarmonyOS 使用@ObservedV2的类,无法从父组件通过构造函数传递给子组件
887浏览 • 1回复 待解决
HarmonyOS 获取18位随机数没有生效
860浏览 • 1回复 待解决
Stack布局设置Alignment.BottomStart没有生效
3343浏览 • 1回复 待解决
HarmonyOS 父组件向子组件传的值,在子组件的哪个环节(生命周期)可以拿到
570浏览 • 1回复 待解决
HarmonyOS PixelMap类型无法从父组件传递给子组件
707浏览 • 1回复 待解决
HarmonyOS 事件能从父组件传递到子组件吗
720浏览 • 1回复 待解决
@Provide使用不规范造成的,@Provide的定义应该在@Consume的祖先组件中,出问题的场景,@Provide和@Consume没有父子关系,导致@Consume初始化找不到@Provide