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

伙将自定义组件储存在容器中,在需要创建的时候取出来,以免写过多的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%") 
  } 
}
  • 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.
分享
微博
QQ
微信
回复
2024-05-24 23:17:17
相关问题
TextInput是否能自定义hover效果
2998浏览 • 1回复 待解决
是否能自定义router跳转的url
1574浏览 • 1回复 待解决
ArkTs如何自定义容器组件?
4179浏览 • 1回复 待解决
是否能定义一个带返回的组件?
1004浏览 • 1回复 待解决
HarmonyOS 用户崩溃是否能共享
1225浏览 • 1回复 待解决
HarmonyOS List滑动速度是否能控制?
1216浏览 • 1回复 待解决
HarmonyOS中是否能直接使用OpenGL?
921浏览 • 1回复 待解决
HarmonyOS 是否能检测到app签名
819浏览 • 1回复 待解决
HarmonyOS 元服务是否能支持Arkweb组件
679浏览 • 1回复 待解决
HarmonyOS TLS Socket是否能直接信任ca
692浏览 • 1回复 待解决
是否支持自定义装饰器
2909浏览 • 1回复 待解决
HarmonyOS ip和端口号是否能拿到
752浏览 • 1回复 待解决
手机root后是否能访问Asset Store Kit
1376浏览 • 1回复 待解决
自定义组件是否支持renderFit属性
2637浏览 • 1回复 待解决
CounterComponent的样式是否可以自定义
942浏览 • 1回复 待解决
HarmonyOS ArkTS是否支持自定义注解
988浏览 • 1回复 待解决