前几天由于项目做的都差不多了,优化重构代码的时候,组长看我应该是闲着没事干,就让我开发鸿蒙版 APP 。我一想,这哪成啊,我连 Android 都没接触过,更何况鸿蒙这么高大上的东西了。
初步探索
早就听闻鸿蒙挺史的大名,那就 BiliBili 大学找找教程吧(毕竟我前端也是 BiliBili 大学毕业的)!随便搜了一下,还真不少,随便找了个播放量比较高的就看了。黑马yyds!
看了几个视频之后,这不跟 TypeScript 没什么区别嘛,而且布局方面基本上都是一个个 Flex 盒子来堆叠,只是函数的形式的写法有些不习惯(有点像 Vue 的 h 函数,不过有一说一,tsx 用起来是真的爽)。
深入组件
今天下午在封装自定义组件的时候,被恶心坏了。我原本封装了一个卡片组件,暂且就叫它 ReCard 吧。我预设了一个默认插槽,然后对其设定了一些样式(宽、高、背景色等等)。
我也不知道叫“插槽”合不合适,就先以 Vue 的风格称呼吧
// ReCard.ets
@Component
export struct ReCard {
@BuilderParam content: () => void = this.defaultBuilder
@Builder
defaultBuilder() {
...
}
build() {
Column() {
this.content()
}
.weight('100%')
.height('100%')
...
}
}初见端倪
现在,组件已经封装好了,该使用了。于是我随着写 Vue 的思路来写,当然,中间也借助了 AI 的辅助。
ReCard 组件也成功加载了,然后,当我给组件添加样式和事件的时候,意外发生了...
// Index.ets
import { ReCard } from '@ohos/common'
@Entry
@Component
struct Index {
build() {
Column() {
...
ReCard() {
Column() {
...
}
}
.width('100%') // 我想给组件添加点击和宽度
.onClick(() => {
...
})
...
}
}
}开始红温
我在编写链式调用的时候,IDE 也有提示补全,当我一切写完之后,发现 .width('100%') 的下面出现了一个红色波浪下划线,此时我应该意识到:出错了。
我寻思着,这个 .width('100%') 是 IDE 给我智能补全的啊,为什么还会报错呢,然后我问了 IDE 自带的 AI,AI 也回答不上什么,然后我就换了其他 AI,什么 ChatGPT、Claude 全都问了个遍,都答不上来什么。我甚至去翻了他的官方文档,也没找到什么结果(文档官网的检索功能还有待加强)。
当时的我气的差点口吐芬芳,后来沉下心来慢慢排查,想到插槽除了在 {} 里面传递,通过参数的方式是否也可行?
于是乎,我犯了一个最低级的错误。
// Index.ets
import { ReCard } from '@ohos/common'
@Entry
@Component
struct Index {
build() {
Column() {
...
ReCard({
content: () => {
Column() {
...
}
}
})
.width('100%')
.onClick(() => {
...
})
...
}
}
}渐入佳境
说真的,我当时有点怀疑我脑子是不是抽风了,不仅无视代码错误,还自信满满的直接点击了运行,当我看到一大串异常后才冷静下来。
content 类型是组件,不能直接传递函数。于是我又额外编写了一个 Builder,事情才得到解决
// Index.ets
import { ReCard } from '@ohos/common'
@Entry
@Component
struct Index {
@Builder
cardContent() {
Column() {
...
}
}
build() {
Column() {
...
ReCard({
content: this.cardContent
})
.width('100%')
.onClick(() => {
...
})
...
}
}
}事后总结
虽然因为这个拖了十几分钟才下班,但是仔细回想一下,最主要的问题还是太依赖 AI 了,自己没有一点主见性,当然也有一方面是自己知识掌握的不够全面吧,毕竟只看了一遍视频,而且还是跳着看的那种。总之,最后的结果是好的嘛。
通过这件事情我明白了一个道理:在进行 AI 辅助开发的时候自己要有独立思考的能力,不能过度相信 AI,否则的话出现无法解决的异常只能和 AI 在那对线,事情也得不到很好的解决。
其次,遇到困难要冷静,与其坐在那里干着急,不如静下心来想想是不是能够通过另一种方式来解决当下的问题。
第三,要学会复盘,这也是提升自我认知的一个很好的方式,复盘不仅仅是加深自己印象,更重要的是尽可能避免以后出现类似的情况。
如今,AI 发展速度越来越快,也在逐渐地替代前端这个行业,我也同时意识到,掌握多个技能也是不得已的事情了。
HarmonyOS,面白い!