一、条件渲染 if/else

先上代码:

  1. @Entry
  2. @Component
  3. struct IfRender{
  4. @State isShowImg: boolean = false
  5. build() {
  6. Column({space:20}){
  7. //通过条件语句控制组件的渲染
  8. if (this.isShowImg) {
  9. Image($r('app.media.startIcon'))
  10. .width(100)
  11. .height(100)
  12. .backgroundColor(Color.Orange)
  13. } else {
  14. Text('Hello world...')
  15. .fontSize(20)
  16. .fontColor(Color.White)
  17. .backgroundColor(Color.Green)
  18. }
  19. Button(this.isShowImg ? '显示文本' : '显示图片')
  20. .backgroundColor(Color.Orange)
  21. .fontColor(Color.White)
  22. .onClick(()=>{
  23. this.isShowImg = !this.isShowImg
  24. })
  25. }
  26. .width('100%')
  27. .height('100%')
  28. .padding(20)
  29. }
  30. }

示例图如下:

条件渲染控制

条件渲染

特别注意:条件渲染只能放在容器组件中使用!!!

二、ForEach循环渲染

ForEach的定义如下:

  1. interface ForEach {(
  2. arr: Array<any>,
  3. itemGenerator: (item: any, index?: number) => void,
  4. keyGenerator?: (item: any, index?: number) => string
  5. ): ForEach;
  6. }
  • arr:表示一个数组
  • itemGenerator:是一个lamdba表达式,用于在循环时根据item参数生成指定的组件

使用示例:

  1. @Entry
  2. @Component
  3. struct ForRender{
  4. private languages: string[] = ['Java','C语言','Python','C#','Golang','Kotlin']
  5. build() {
  6. Column({space:20}) {
  7. ForEach(this.languages,(item:String,index?:number) => {
  8. Text(`编程语言:${item}`)
  9. .backgroundColor(Color.Red)
  10. .fontColor(Color.Yellow)
  11. .fontSize(18)
  12. .margin({top:20})
  13. .padding(10)
  14. })
  15. }
  16. .width('100%')
  17. .height('100%')
  18. .padding(20)
  19. }
  20. }

运行结果如下图: 循环渲染

三、LazyForEach循环渲染