自定义是否能通过容器保存

伙将自定义组件储存在容器中,在需要创建的时候取出来,以免写过多的ifelse逻辑。

HarmonyOS
2024-05-23 23:29:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
ubaba

自定义组件是struct而不是class,无法储存在容器中。Builder方法可以通过wrapBuilder进行封装成WrappedBuilder对象,可以进行传递和赋值,也可以存储在容器中。伙伴上述场景可以将自定义组件封装在Builder函数,通过builder的封装来完成存储。

参考代码:

@Component 
struct ComA { 
  build() { 
    Text("ComA").fontSize(50).fontWeight(FontWeight.Bold) 
  } 
} 
  
@Component 
struct ComB { 
  build() { 
    Text("ComB").fontSize(50).fontWeight(FontWeight.Bold) 
  } 
} 
  
@Component 
struct ComC { 
  build() { 
    Text("ComC").fontSize(50).fontWeight(FontWeight.Bold) 
  } 
} 
  
  
//ifelse逻辑分支写法 
@Builder 
function buildCom(param: string) { 
  if (param == "ComA") { 
    ComA() 
  } else if (param == "ComB") { 
    ComB() 
  } else if (param == "ComC") { 
    ComC() 
  } 
} 
  
@Builder 
function buildComA(){ 
  ComA() 
} 
@Builder 
function buildComB(){ 
  ComB() 
} 
  
@Builder 
function buildComC(){ 
  ComC() 
} 
  
//通过map封装在容器中 
let map:Map<string,WrappedBuilder<[]>> =new Map() 
map.set("ComA",wrapBuilder(buildComA)) 
map.set("ComB",wrapBuilder(buildComB)) 
map.set("ComC",wrapBuilder(buildComC)) 
  
  
  
@Entry 
@Component 
struct Page12 { 
  @State message: string = 'Hello World'; 
  @State arr: string[] = ["ComA", "ComB", "ComC"]; 
  
  build() { 
    Column() { 
      ForEach(this.arr, (item: string) => { 
      //在使用时根据key去取 
      map.get(item)?.builder() 
      }) 
    } 
    .justifyContent(FlexAlign.Center) 
    .width("100%") 
    .height("100%") 
  } 
}
分享
微博
QQ
微信
回复
2024-05-24 23:17:17
相关问题
TextInput是否能自定义hover效果
766浏览 • 1回复 待解决
是否能自定义router跳转的url
512浏览 • 1回复 待解决
ArkTs如何自定义容器组件?
1561浏览 • 1回复 待解决
是否支持自定义装饰器
679浏览 • 1回复 待解决
自定义弹窗自定义转场动画
394浏览 • 1回复 待解决
ArkTS是否支持自定义装饰器?
491浏览 • 1回复 待解决
自定义组件是否支持renderFit属性
541浏览 • 1回复 待解决
是否可以自定义权限弹框文字
464浏览 • 1回复 待解决
Grid组件的scrollBar是否支持自定义
812浏览 • 1回复 待解决
Ark UI是否如何使用自定义字体
1880浏览 • 1回复 待解决
弹窗打开、关闭动画是否支持自定义
659浏览 • 1回复 待解决
华为手机是否支持自定义锁屏页面?
2622浏览 • 1回复 待解决
手机root后是否能访问Asset Store Kit
156浏览 • 1回复 待解决
hvigor自定义扩展demo
314浏览 • 1回复 待解决