HarmonyOS鸿蒙Next中foreach语法的配置中,报错,但就是不知道怎么改才能实现第一课中说的foreach效果!求解答!!

HarmonyOS鸿蒙Next中foreach语法的配置中,报错,但就是不知道怎么改才能实现第一课中说的foreach效果!求解答!! 跟着第一课练习的这段代码,为什么我的编辑器中,就是报错,是什么原因,求大神们解答!!

cke_1145.png

cke_1685.png

[@Component](/user/Component)
struct todolist {

  totalTasks: Array<string> = ['早起','跑步','写作业','看报纸']
  [@State](/user/State) iscomplete:boolean=false
  [@Builder](/user/Builder) labeicon(icon:Resource){
    Image(icon)
      .width(30)
      .margin({left:10})
}
  private content? : string
  build() {

    Row() {
      if (this.iscomplete) {
        this.labeicon($r('app.media.yes'))
      }
      else {this.labeicon($r('app.media.no'))
      }

      Text(this.content)
        .fontSize(20)
        .padding({left:10,right:10})
        .opacity(this.iscomplete? 0.4:1)
        .decoration({
          type:this.iscomplete?TextDecorationType.LineThrough:TextDecorationType.None
        })
    }
    .backgroundColor(Color.White)
    .width(320)
    .height(60)
    .padding({left:20})
    .margin({bottom:20})
    .borderRadius(50)
    .borderStyle(BorderStyle.Dashed)
    .onClick( () => {
      this.iscomplete = !this.iscomplete
    } )
  }
}

更多关于HarmonyOS鸿蒙Next中foreach语法的配置中,报错,但就是不知道怎么改才能实现第一课中说的foreach效果!求解答!!的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

你只是声明了一个’totalTasks’变量,并没有初始化,当然会报错。

// 初始化一下就好了
private totalTasks: Array<string> = ['早起','跑步','写作业','看报纸']
// 移除子组件中 content 变量前面的 private  
content?: string

以下是新代码的链接可以看一下

通过MVVM开发备忘录实战

更多关于HarmonyOS鸿蒙Next中foreach语法的配置中,报错,但就是不知道怎么改才能实现第一课中说的foreach效果!求解答!!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢大神的解答~

这边衍生了两个问题,劳烦大神解答:

  1. 是一个页面中只能有一个privave吗?
  2. 初始化是什么意思?如果下次有这样的提示,初始化是怎样的操作。(如我上图的这个,是在string 后面加了一个= [xxx] 把文本关联,遇到其他需要初始化的,也是可以这么用吗?

1、可以有多个。 2、初始化的意思简单来说就是给变量赋初始值。 3、可以,只要类型能对上就可以。

感谢解答🙏

在HarmonyOS鸿蒙Next中,foreach语法需要使用ArkTS的语法规则。正确写法示例:

let arr: number[] = [1, 2, 3];
arr.forEach((item: number) => {
  console.log(item);
});

常见错误原因:

  1. 使用了JavaScript的for…in语法而非forEach
  2. 箭头函数参数类型未声明
  3. 数组类型未正确定义

确保:

  1. 使用TypeScript语法
  2. 数组和参数类型明确定义
  3. 使用ArkTS支持的数组操作方法

从代码和截图来看,问题出在ForEach循环的使用上。主要存在两个问题:

  1. totalTasks数组未初始化:在Index组件中声明了totalTasks但未赋初始值,应该改为:
private totalTasks: Array<string> = ['早起','跑步','写作业','看报纸']
  1. ForEach语法使用不当:当前写法会导致编译错误,正确的ForEach语法应该是:
ForEach(this.totalTasks, (item: string) => {
  todolist({ content: item })
}, (item: string) => item)

第三个参数是key生成函数,在简单字符串数组情况下可以直接返回item本身作为key。

修改后的ForEach循环就能正确渲染每个待办事项了。这种写法是HarmonyOS ArkUI的标准ForEach语法,必须包含数组、item构建函数和key生成函数三部分。

回到顶部