HarmonyOS 鸿蒙Next DevEco Studio 4.0 release和3.1的报错信息不一致问题

HarmonyOS 鸿蒙Next DevEco Studio 4.0 release和3.1的报错信息不一致问题

问题背景

我想尝试安装DevEco Studio 4.0 release。安装包来源于gitee上的ArkUI-X

image.png

起因

我们知道:ArkUI要求,父组件向子组件传递参数时,发生了“父组件里已经设置过了@state装饰的属性,现在传递给子组件的@State装饰的属性”的情况,此时IDE本应该发生报错(在代码下方产生红色波浪线)。但,DevEco Studio 3.1和4.0的报错情况不一致。

同时,也参考了B站上黑马程序员的介绍视频——P17《16.ArkUI-状态管理-@Prop@Link@Provide@Consume》的05:51的位置。它们的IDE 3.1也在这里报错。而DevEco Studio 4.0居然不报错

IDE相关截图

注意观察代码第第60行,完整的参考代码见文末

cke_131162.png

对比分析一下DevEco Studio 3.1的情况

这里确实会报错!

我的疑问

所以,按HarmonyOS应用未来的发展来看,到底应该以谁为准?

示例代码

class Task {
    static id: number = 1
    // 任务名称
    name: string = `任务${Task.id++}`
    // 任务状态:是否完成
    finished: boolean = false
}

// 统一卡片样式
@Styles
function filling_Cards() {
    .width('95%')
    .padding(20)
    .backgroundColor(Color.White)
    .borderRadius(15)
    .shadow({
        radius: 6,
        color: '#1F000000',
        offsetX: 2,
        offsetY: 4
    })
}

// 统一完成样式
@Extend(Text)
function finished_Task() {
    .decoration({ type: TextDecorationType.LineThrough })
    .fontColor('#B1B2B1')
}

@Entry
@Component
struct Prop_Decorator {
    // 总任务数量
    [@State](/user/State) totalTask: number = 0
    // 已完成的任务数量
    [@State](/user/State) finishedTask: number = 0
    // 任务数组
    [@State](/user/State) tasks: Task[] = []

    handleTaskChange(val: number) {
        if (val == 1) {
            // 修改任务总数计数器——通过测量数组长度精确判定
            this.totalTask = this.tasks.length
        } else if (val == 2) {
            // 更新已完成任务计数器的值
            this.finishedTask = this.tasks.filter(item => item.finished).length
        } else {
            this.totalTask = this.tasks.length
            this.finishedTask = this.tasks.filter(item => item.finished).length
        }
    }

    build() {
        Column({ space: 10 }) {
            // 1. 任务进度卡片
            Task_Statistics({finishedTask: this.finishedTask})

            // 2. 新增任务的按钮
            Button('新增任务')
                .onClick((event: ClickEvent) => {
                    // 向任务数组新增数组元素
                    this.tasks.push(new Task())

                    // 修改任务总数计数器
                    this.handleTaskChange(1)
                })
                .width(200)

            // 3. 任务列表
            List({ space: 10 }) {
                ForEach(
                    this.tasks,
                    (item: Task, index) => {
                        ListItem() {
                            Row() {
                                Text(item.name)
                                    .fontSize(20)
                                Checkbox()
                                    .select(item.finished)
                                    .onChange(val => {
                                        // 更新当前任务的状态
                                        item.finished = val

                                        // 更新已完成任务计数器的值
                                        this.handleTaskChange(2)
                                    })
                            }
                            .filling_Cards()
                            .justifyContent(FlexAlign.SpaceBetween)
                        }
                        .swipeAction({ end: this.deleteButton(index) })
                    }
                )
            }
            .width('100%')
            .alignListItem(ListItemAlign.Center)
            .layoutWeight(1)
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#F1F2F3')
    }

    @Builder
    deleteButton(index: number) {
        Button() {
            Image($r('app.media.ic_public_delete_filled'))
                .fillColor(Color.White)
                .width(25)
        }
        .margin({ left: 5 })
        .padding(10)
        .type(ButtonType.Circle)
        .backgroundColor(Color.Red)
        .onClick(() => {
            this.tasks.splice(index, 1)
            this.handleTaskChange(3)
        })
    }
}

@Component
struct Task_Statistics {
    [@State](/user/State) finishedTask: number = 0
    [@State](/user/State) totalTask: number = 0

    build() {
        Row() {
            Text('任务进度:')
                .fontSize(30)
                .fontWeight(FontWeight.Bold)

            // Stack——堆叠容器
            Stack() {
                Progress({
                    value: this.finishedTask,
                    total: this.totalTask,
                    type: ProgressType.Ring
                })
                    .width(100)

                Row() {
                    Text(this.finishedTask.toString())
                        .fontSize(24)
                        .fontColor('#F36D')

                    Text(' / ' + this.totalTask.toString())
                        .fontSize(24)
                }
            }
        }
        .filling_Cards()
        .margin({ top: 20, bottom: 10 })
        .justifyContent(FlexAlign.SpaceEvenly)
    }
}

更多关于HarmonyOS 鸿蒙Next DevEco Studio 4.0 release和3.1的报错信息不一致问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

以最新版本为主,现在是以next版本

更多关于HarmonyOS 鸿蒙Next DevEco Studio 4.0 release和3.1的报错信息不一致问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


高版本,现在大厂好像都是api11了

在HarmonyOS鸿蒙Next的DevEco Studio 4.0版本中,报错信息与3.1版本不一致,主要是由于4.0版本对错误处理机制和提示信息进行了优化和升级。4.0版本引入了更详细的错误分类和更精准的错误定位,帮助开发者更快地识别和解决问题。例如,3.1版本可能只提供简单的错误描述,而4.0版本会提供具体的错误类型、发生位置以及可能的解决方案。此外,4.0版本对某些特定场景下的错误处理逻辑进行了调整,可能导致相同代码在不同版本中报错信息不同。建议开发者根据4.0版本的报错信息调整代码逻辑,确保兼容性。

回到顶部