做鸿蒙 App 一个月:10 个 ArkUI 大坑

做鸿蒙 App 一个月:10 个 ArkUI 大坑
在这里插入图片描述

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名)

大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、ZEEKLOG、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出

我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

文章目录

引言

最近一个月,我从传统 App(Android / Flutter)转向开发鸿蒙应用,用 ArkUI(ArkTS) 写了一个完整的项目。

一开始我以为:

“不就是一个声明式 UI 框架吗?”

但真正写下来才发现,ArkUI 的设计和传统 App 差别非常大

一个月下来,我踩了不少坑。

坑 1:状态没有用 @State,UI 不更新

很多刚写 ArkUI 的开发者,会这样写代码:

struct CounterPage { count:number=0build(){Column(){Text(`count: ${this.count}`)Button("Add").onClick(()=>{this.count++})}}}

你会发现:点击按钮 UI 不更新。

原因很简单:ArkUI 的 UI 是 响应式的,只有被声明为状态的变量才会触发刷新。

正确写法:

@Entry@Component struct CounterPage {@State count:number=0build(){Column(){Text(`count: ${this.count}`)Button("Add").onClick(()=>{this.count++})}}}

核心原则:

UI 依赖的数据必须是状态。

坑 2:组件参数忘记用 @Prop

很多人写组件时会这样写:

@Component struct UserCard { name:stringbuild(){Text(this.name)}}

在父组件使用:

UserCard({ name:"Tom"})

结果编译报错,原因是:ArkUI 的组件参数必须使用 @Prop 标记。

正确写法:

@Component struct UserCard {@Prop name:stringbuild(){Text(this.name)}}

如果参数会变化,可以用:

@Link 

@Observed 

坑 3:列表渲染性能问题

很多开发者第一次写列表会这样:

Column(){ForEach(this.list,(item)=>{Text(item.name)})}

如果列表很多:

  • UI 会卡顿
  • 滑动不流畅

因为 Column 会一次性渲染所有内容。正确做法:

使用 LazyForEach

List(){LazyForEach(this.list,(item)=>{ListItem(){Text(item.name)}})}

优势:

  • 按需渲染
  • 性能更好

坑 4:组件状态共享混乱

很多人一开始会滥用 @State,例如:

@State userInfo: User 

然后在多个组件之间传递,结果导致:

  • 状态同步混乱
  • UI 更新异常

正确做法是:使用 @Provide / @Consume,例如父组件:

@Provide userInfo: User ={ name:"Tom"}

子组件:

@Consume userInfo: User 

这样可以实现 跨组件状态共享

坑 5:生命周期理解错误

很多 Android / Flutter 开发者会寻找类似:

onCreate onResume 

这样的生命周期。ArkUI 其实提供了不同机制:

aboutToAppear(){console.log("页面即将出现")}aboutToDisappear(){console.log("页面消失")}

例如加载数据:

aboutToAppear(){this.loadData()}

坑 6:页面路由方式不同

很多开发者会寻找传统 Router,ArkUI 的导航方式是:

router.pushUrl() 

例如:

import router from'@ohos.router' router.pushUrl({ url:'pages/detail'})

返回:

router.back()

坑 7:UI 布局思维没转过来

很多 Android 开发者习惯:

LinearLayout RelativeLayout ConstraintLayout 

ArkUI 的布局更接近 Flexbox 思维,例如:

Row(){Text("Left")Blank()Text("Right")}

Blank() 相当于 flex spacer

坑 8:组件拆分不合理

很多人会写出一个 巨大的页面组件

struct HomePage {// 1000 行代码}

正确方式是 组件拆分

HomePage ├─ Banner ├─ UserInfo ├─ MenuGrid ├─ FeedList 

例如:

@Component struct Banner {build(){Text("Banner")}}

坑 9:动画系统不熟悉

ArkUI 内置动画非常简单:

.animateTo({ duration:300},()=>{this.scale =1.2})

例如点击放大:

Button("Click").onClick(()=>{animateTo({ duration:300},()=>{this.scale =1.2})})

坑 10:没有理解声明式 UI

这是 最核心的坑,很多开发者还在用 命令式思维

修改 UI 刷新 UI 重新渲染 UI 

而 ArkUI 的核心思想是:

UI = State

例如:

Text(this.isLogin ?"已登录":"未登录")

只需要改变状态:

this.isLogin =true

UI 会自动更新。

总结

写了一个月鸿蒙应用,我最大的感受是:ArkUI 的学习成本不在语法,而在思维。

你需要从:命令式 UI,转变为声明式 UI + 状态驱动 UI。理解这一点之后,很多问题都会迎刃而解。

如果你刚开始学习鸿蒙开发,建议重点理解三件事:

1️⃣ 状态管理
2️⃣ 声明式 UI 思维
3️⃣ 组件化设计

掌握这三点,ArkUI 会顺手很多。

Read more

无人机遥感航拍巡检数据集 无人机遥感图像识别 无人机视角山区泥石流和滑坡图像识别数据集-数据集第10067期

无人机遥感航拍巡检数据集 无人机遥感图像识别 无人机视角山区泥石流和滑坡图像识别数据集-数据集第10067期

滑坡检测数据集核心信息介绍 ** 这个滑坡检测数据集主要用于目标检测任务,整体数据规模和细节都比较明确。从数量上看,数据集总共包含 1660 张图像, 往期热门主题 主题搜两字"关键词"直达 代码数据获取: 获取方式:***文章底部卡片扫码获取*** 覆盖了YOLO相关项目、OpenCV项目、CNN项目等所有类别, 覆盖各类项目场景(包括但不限于以下----欢迎咨询定制): 项目名称项目名称基于YOLO+deepseek 智慧农业作物长势监测系统基于YOLO+deepseek 人脸识别与管理系统基于YOLO+deepseek 无人机巡检电力线路系统基于YOLO+deepseek PCB板缺陷检测基于YOLO+deepseek 智慧铁路轨道异物检测系统基于YOLO+deepseek 102种犬类检测系统基于YOLO+deepseek 人脸面部活体检测基于YOLO+deepseek 无人机农田病虫害巡检系统基于YOLO+deepseek 水稻害虫检测识别基于YOLO+deepseek 安全帽检测系统基于YOLO+deepseek 智慧铁路接触网状态检测系统基于YOLO+

By Ne0inhk
程序员的自我修养:用 AR 眼镜管理健康

程序员的自我修养:用 AR 眼镜管理健康

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 一、从一次体检说起 * 二、为什么是 AR 眼镜? * 三、技术选型:CXR-M SDK vs 灵珠平台 * 四、项目架构设计 * 五、从配置开始:Gradle 和权限 * 5.1 添加 SDK 依赖 * 5.2 权限配置 * 六、数据层实现 * 6.1 数据模型 * 6.2 数据仓库 * 七、SDK 封装层 * 7.1 发送提醒到眼镜 * 7.2 TTS 语音播报

By Ne0inhk
《星辰 RPA 全自动:做一个小红书自动发文机器人》

《星辰 RPA 全自动:做一个小红书自动发文机器人》

前引:在企业数智化转型的浪潮中,如何突破 “有 AI 无落地、有流程无智能” 的困局?星辰 Agent 与星辰 RPA 的出现,正是为了解决这一痛点。作为科大讯飞旗下的双核心产品,星辰 Agent 以企业级 Agentic Workflow 开发平台为底座,提供 AI 工作流编排、模型管理与跨系统连接能力;而星辰 RPA 则以超过 300 个自动化原子能力,让业务流程真正 “动” 起来! 目录 一、企业机器人自动化平台:RPA (1)RPA介绍 (2)服务端安装 (1)clone项目 (2)配置为本地访问 (3)检查镜像源 (4)配置default.conf

By Ne0inhk
AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

* 本文重点在于文心大模型的微调 * 一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 计算机配置 * 在国内部署选个自带CUDA的会快一点,不自带还得去NVIDIA下载,而其提供的CUDA依赖需要科学上网才能下载快。换阿里清华源也没用。 * 文心模型汇总 环境配置与部署 1. 更换镜像源(使用阿里云镜像源): sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.

By Ne0inhk