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

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

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

自定义组件是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效果
2172浏览 • 1回复 待解决
是否能自定义router跳转的url
897浏览 • 1回复 待解决
ArkTs如何自定义容器组件?
3125浏览 • 1回复 待解决
是否能定义一个带返回的组件?
266浏览 • 1回复 待解决
HarmonyOS 用户崩溃是否能共享
372浏览 • 1回复 待解决
HarmonyOS中是否能直接使用OpenGL?
9浏览 • 1回复 待解决
HarmonyOS List滑动速度是否能控制?
315浏览 • 1回复 待解决
HarmonyOS TLS Socket是否能直接信任ca
7浏览 • 1回复 待解决
手机root后是否能访问Asset Store Kit
608浏览 • 1回复 待解决
是否支持自定义装饰器
2131浏览 • 1回复 待解决
ArkTS是否支持自定义装饰器?
2523浏览 • 1回复 待解决
HarmonyOS 组件是否支持自定义事件
15浏览 • 1回复 待解决
HarmonyOS ArkWeb是否支持自定义UserAgent
415浏览 • 1回复 待解决
HarmonyOS 是否支持自定义装饰器?
272浏览 • 1回复 待解决