HarmonyOS鸿蒙Next中为什么代码老是报错 语法没错阿

HarmonyOS鸿蒙Next中为什么代码老是报错 语法没错阿

@Entry
@Component
struct TaskManager {
@State tasks: Task[] = []
@State inputText: string = ‘’
@State currentFilter: string = ‘all’ // 筛选条件:all/undone/done

build() {  
    Row() {  
        // 左侧分类栏  
        Column({ space: 16 }) {  
            Text('学习任务管理').fontSize(20).fontWeight(500).margin({ bottom: 16 })  
            Row() {  
                TextInput({ placeholder: '输入任务名称' })  
                    .width(200)  
                    .onChange((value: string) => this.inputText = value)  
                Button('添加').margin({ left: 8 })  
                    .onClick(() => this.addTask())  
            }  
            // 分类按钮  
            Row({ space: 8 }) {  
                ['全部任务', '未完成', '已完成'].forEach((item, index) => {  
                    Button(item)  
                        .backgroundColor(this.currentFilter === item.toLowerCase() ? '#4CAF50' : '#f0f0f0')  
                        .textColor(this.currentFilter === item.toLowerCase() ? 'white' : 'black')  
                        .onClick(() => this.currentFilter = item.toLowerCase())  
                })  
            }  
        }.width('20%').padding(16)  

        // 右侧任务列表  
        Column() {  
            List() {  
                ForEach(this.filteredTasks, (task, index) => {  
                    ListItem() {  
                        Row({ space: 8 }) {  
                            Text((index + 1).toString()).width('5%') // 序号  
                            Text(task.name)  
                                .decoration(task.isDone ? TextDecoration.LineThrough : TextDecoration.None)  
                                .fontColor(task.isDone ? '#888' : '#000')  
                            Checkbox({ checked: task.isDone })  
                                .onChange((checked: boolean) => this.toggleTaskStatus(task))  
                            Button('删除').margin({ left: 8 })  
                                .onClick(() => this.showDeleteConfirm(task))  
                        }  
                    }  
                }, (task) => task.id) // 唯一标识  
            }  
        }.width('80%').padding(16)  
    }.height('100%')  
}  

// 添加任务(含非空验证)  
addTask() {  
    if (!this.inputText.trim()) {  
        AlertDialog.show({ message: '请输入任务名称' })  
        return  
    }  
    this.tasks.push({  
        id: Date.now(),  
        name: this.inputText,  
        isDone: false  
    })  
    this.inputText = '' // 清空输入框  
}  

// 切换任务状态  
toggleTaskStatus(task: Task) {  
    task.isDone = !task.isDone  
}  

// 删除任务确认对话框  
showDeleteConfirm(task: Task) {  
    AlertDialog.show({  
        message: '是否删除此任务?',  
        confirmButton: {  
            text: '确认',  
            onClick: () => {  
                this.tasks = this.tasks.filter(t => t.id !== task.id)  
            }  
        },  
        cancelButton: { text: '取消' }  
    })  
}  

// 筛选任务列表  
get filteredTasks(): Task[] {  
    if (this.currentFilter === 'all') return this.tasks  
    if (this.currentFilter === 'undone') return this.tasks.filter(t => !t.isDone)  
    return this.tasks.filter(t => t.isDone)  
}  

}

// 任务数据结构
interface Task {
id: number
name: string
isDone: boolean
}


更多关于HarmonyOS鸿蒙Next中为什么代码老是报错 语法没错阿的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

@Entry @Component struct TaskManager { @State tasks: Task[] = [] @State filterTasks:Task[] = [] @State inputText: string = ‘’ @State currentFilter: string = ‘all’ // 筛选条件:all/undone/done private titleList:TabInfo[]=[{name:‘全部任务’,id:‘all’}, {name:‘未完成’,id:‘undone’}, {name:‘已完成’,id:‘down’}]

build() { Column() { // 左侧分类栏 Column({ space: 16 }) { Text(‘学习任务管理’).fontSize(20).fontWeight(500).margin({ bottom: 16 }) Row() { TextInput({ placeholder: ‘输入任务名称’,text:this.inputText }) .width(200) .onChange((value: string) => this.inputText = value) Button(‘添加’).margin({ left: 8 }) .onClick(() => this.addTask()) } }.width(‘100%’).padding(16) Row(){ // 分类按钮 Column({ space: 8 }) { ForEach(this.titleList, (item: TabInfo) => { Button(item.name) .backgroundColor(this.currentFilter === item.id ? ‘#4CAF50’ : ‘#f0f0f0’) .fontColor(this.currentFilter === item.id ? ‘white’ : ‘black’) .onClick(() => { this.currentFilter = item.id }) }, (item: TabInfo) => item.id) } // 右侧任务列表 List() { ForEach(this.getFilteredTasks(this.currentFilter), (task:Task, index) => { ListItem() { ItemView({task:task,index:index}) } }, (task:Task) => task.id+’’) // 唯一标识 }.layoutWeight(1) }.width(‘100%’).layoutWeight(1).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Top)

}.height('100%')

}

// 添加任务(含非空验证) addTask() { if (!this.inputText.trim()) { AlertDialog.show({ message: ‘请输入任务名称’ }) return } this.tasks.push(new Task(Date.now(),this.inputText,false)) this.inputText = ‘’ // 清空输入框 }

// 筛选任务列表 getFilteredTasks(currentFilter:string): Task[] { switch (currentFilter){ case ‘all’: return this.tasks case ‘undone’: return this.tasks.filter(t => !t.isDone) } return this.tasks.filter(t => t.isDone) }

// 筛选任务列表 getfilteredTasks(): Task[] { switch (this.currentFilter){ case ‘all’: this.filterTasks = this.tasks break case ‘undone’: this.filterTasks =this.tasks.filter(t => !t.isDone) }

if (this.currentFilter === 'all')
if (this.currentFilter === 'all') return this.tasks
if (this.currentFilter === 'undone') return this.tasks.filter(t => !t.isDone)
return this.tasks.filter(t => t.isDone)

} }

// 任务数据结构 @Observed class Task { id: number=0 name: string=’’ isDone: boolean=false

constructor(id: number, name: string, isDone: boolean) { this.id = id this.name = name this.isDone = isDone } }

// 任务数据结构 class TabInfo { name: string=’’ id: string=’’ }

@Component export struct ItemView{ @ObjectLink task:Task @Prop index:number build() { Row({ space: 8 }) { Text((this.index + 1).toString()).width(‘5%’) // 序号 Text(this.task.name) .decoration({type:this.task.isDone ? TextDecorationType.LineThrough : TextDecorationType.None}) .fontColor(this.task.isDone ? ‘#888’ : ‘#000’) .layoutWeight(1) Blank() Checkbox() .select(this.task.isDone ) .onChange((checked: boolean) =>{ this.task.isDone=checked }) Button(‘删除’).margin({ left: 8 }) .onClick(() => this.showDeleteConfirm(this.task)) } }

// 删除任务确认对话框 showDeleteConfirm(task: Task) { AlertDialog.show({ message: ‘是否删除此任务?’, buttons: [{ value: ‘取消’, action: () => { console.info(‘Callback when the first button is clicked’); } }, { // enabled: true, // defaultFocus: true, // style: DialogButtonStyle.HIGHLIGHT, value: ‘确认’, action: () => { // this.tasks = this.tasks.filter(t => t.id !== task.id) } }], }) } }

更多关于HarmonyOS鸿蒙Next中为什么代码老是报错 语法没错阿的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

补全版本信息(如:开发工具、手机系统/api语言版本信息),让参与用户更精准定位您的问题;

补全问题现象(如:报错日志、异常截图、问题背景),让参与用户更清晰了解您的问题;

更多提问技巧,请参考:《提问小技巧:让解答更高效》

还有是什么版本,可能是不兼容

报错信息发出来呢,从二楼发布的内容来看,先看了2项,一个是说textColor属性不存在(Button组件中好像确实不存在这个属性),第二项是说在严格模式下,对象不能定义为anyunknown

感觉他写的代码很乱,有一些属性像textcolor啥的都不是arkts里面的,不知道是不是初学者,

什么版本?你的代码我这里直接爆红运行不了

在HarmonyOS Next开发中,代码报错但语法正确可能有以下原因:

  1. 开发环境版本不匹配(如SDK/IDE版本与设备系统版本不一致)

  2. 未正确导入所需的ability/模块依赖

  3. 使用了Next版本已废弃的API

  4. 资源文件未同步或配置错误(如module.json5)

  5. 多线程操作未在主线程执行UI更新

检查DevEco Studio的实时错误提示,重点查看非语法类报错信息。确保项目clean后rebuild,并核对API文档的版本兼容性说明。

从代码来看,有几个可能导致报错的常见问题:

  1. 在ForEach中使用forEach方法是不允许的。应该直接使用ForEach的数组参数:
ForEach(['全部任务', '未完成', '已完成'], (item) => {
  Button(item)
  .backgroundColor(this.currentFilter === item.toLowerCase() ? '#4CAF50' : '#f0f0f0')
  .onClick(() => this.currentFilter = item.toLowerCase())
})
  1. 确保Task接口定义在使用之前。建议将接口定义移到组件之前。

  2. 检查是否正确定义了filteredTasks计算属性。在HarmonyOS中,计算属性需要加上@Computed装饰器:

[@Computed](/user/Computed)
get filteredTasks(): Task[] {
  // 筛选逻辑
}
  1. 确保所有导入的组件(TextInput、Button等)都已正确导入。

  2. 检查是否缺少必要的装饰器,比如@Observed装饰Task类(如果Task是class而非interface)。

建议先检查这些常见问题点,如果仍有报错,可以提供具体的错误信息以便更精准定位问题。

回到顶部