1. 为什么用React Native做鸿蒙开发——跨端方案的现实选择
1.1 鸿蒙热度背后,跨端开发者的机会点
做移动端开发的朋友应该都有感受,这两年鸿蒙系统的热度一直居高不下。我身边不少Android、Flutter、RN的同事都在讨论一个问题:鸿蒙应用到底该用什么技术栈去写?原生ArkTS当然是最正统的答案,但对我们这些手里还维护着React Native老项目的团队来说,直接推翻重写成本太高,于是“React Native能不能跑在鸿蒙上”就成了一个非常实际的问题。
先说结论:能跑,而且社区已经有不少成熟方案。目前最主流的路径是React Native for OpenHarmony(简称RNOH),这是社区与厂商合作维护的一套React Native适配层,目标是让RN开发者用一套JS/TS代码,同时输出Android、iOS、鸿蒙三端应用。它的核心思路和RN本身一样:JS代码跑在JS引擎里,通过桥接层调用底层的原生UI组件和API,只不过桥接的目标从Android的View、iOS的UIKit换成了鸿蒙的ArkUI组件。
从实际体验来说,RNOH目前已经能覆盖大部分RN核心组件和API,比如View、Text、ScrollView、Animated、Networking这些,日常业务开发基本够用。对一些比较冷门的第三方原生模块,可能需要等适配或自己写桥接,但拿来做入门学习、原型验证、中小型业务是完全没问题的。对团队来说,这意味着已有的RN代码有一大部分可以平移到鸿蒙,人力和时间成本都能压下来,这也是我推荐大家重视这条路的根本原因。
当然,方案不只有RNOH一个。把市面上几种跨端方案放到一起对比一下,会更清楚为什么我们选它:
| 方案 | 学习成本 | 生态成熟度 | 鸿蒙适配现状 | 适合场景 |
|---|---|---|---|---|
| 原生ArkTS | 高(新语言+新框架) | 高(官方全力推) | 原生支持,性能最佳 | 鸿蒙专属应用、系统级应用 |
| Flutter | 中 | 极高 | 有适配但仍在迭代中 | 已有Flutter代码库的团队 |
| React Native(RNOH) | 低(对RN开发者) | 高 | 核心组件与API逐步补齐 | 已有RN代码、希望低成本多端复用的团队 |
| 其他跨端(如Taro) | 中 | 中 | 部分框架在探索 | H5/小程序为主、顺带做App |
对大多数RN开发者来说,RNOH入局门槛最低,因为你正在用的React、JS/TS、样式系统、组件模型全都还沿用了,只是多了一层鸿蒙的编译和打包流程。这篇文章就是带着这个思路,用一个“模拟汽车仪表盘”的小项目,把这条路完整走一遍。
1.2 为什么拿“模拟汽车仪表盘”练手
我挑选练习项目一向有个标准:看着要有视觉冲击力,做起来又不会拖太久。模拟汽车仪表盘恰好满足。
首先,它有很强的UI复杂度,但又没有复杂的业务逻辑。仪表盘的核心是圆形表盘、刻度、指针、数字显示,这些天然适合用SVG和动画来实现,能一次性把RN的布局能力、矢量绘制能力、动画系统全部练到。其次,它自带“数据驱动”属性——车速、转速、里程都是动态数值,需要定时器、状态管理、组件间通信,正好模拟了真实App里的数据流。
更重要的是,仪表盘是一个典型的“效果导向”项目,做完之后非常有成就感。我见过不少新手从ToDoList、新闻列表这类项目入门,说实话做完没什么感觉。但仪表盘不一样,哪怕只有几百行代码,你把它跑在鸿蒙模拟器上,指针一甩、数字一滚,那个视觉反馈比什么列表Demo都来得强烈。而且它后续还可以不断扩展:接入OBD蓝牙数据、做多主题皮肤、加GPS定位联动,都是自然延伸,不会走到死胡同。
从学习路线来看,我建议你把这个项目当成“RN鸿蒙开发的第一课”。它覆盖的知识点密度非常高:组件化拆分、样式系统、SVG绘制、动画、定时器、状态管理、平台适配、原生联调,几乎把RN开发日常会碰到的东西都过了一遍。做完这个项目,你对整个RN开发流程的把握会上一个台阶,后面再做正经业务项目会顺手很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工程初始化
2.1 你要准备的工具链
很多人学RN被卡住的第一关就是环境。尤其是鸿蒙方向,因为你不仅要有RN那套Node、JDK环境,还要装DevEco Studio和鸿蒙SDK。我这里把完整清单列出来,大家对照着装就行。
- Node.js:建议18及以上版本,npm或yarn随意,后面装依赖和跑Metro都用得到。
- JDK:建议JDK 17,主要用于Gradle构建Android APK,同时鸿蒙工程的构建工具链也会用到Java环境,版本不对会在编译阶段报各种莫名其妙的错误。
- Android Studio(可选):如果你还要调试Android端,就装上,顺便把Android SDK和模拟器配好。
- DevEco Studio:鸿蒙官方IDE,类似Android Studio之于Android。注意版本要和RNOH要求的版本对齐,不同版本的RNOH对DevEco的版本要求会有差异,我后面会讲怎么查。
- OpenHarmony SDK:安装DevEco Studio时一般会提示你下载,也可以手动配置。这里要提醒一句,SDK包体积不小,安装时耐心点,网络不好的话可以考虑镜像下载。
这里有个比较容易踩的坑:版本对应关系。RNOH和React Native版本是严格绑定的,RNOH目前主要适配了RN的0.72等几个版本线,不能用最新的RN 0.73、0.74直接配RNOH的旧包,否则编译大概率挂。我的建议是,先确定你要用的RNOH版本,再反推RN主版本,最好去RNOH的GitHub仓库看它写明支持的RN版本组合,不要自己随意搭配。
以我这次项目为例,我最终确定的是RN 0.72.x搭配对应的RNOH版本,整体比较稳定。版本选择这种事,永远记住一句话:稳定压倒一切,能用久经考验的组合,就不要追求最新。
2.2 初始化一个RN工程并接入鸿蒙
环境装好之后,第一步是用RN官方脚手架初始化一个工程。这里我直接用命令行操作:
bash复制npx @react-native-community/cli@latest init HarmonyDashboard --version 0.72.10
命令执行完会生成一个名为HarmonyDashboard的RN工程。我们先用cd HarmonyDashboard进入目录,然后安装RNOH相关的依赖包。这里要特别说明,RNOH的包名和安装方式可能随着版本迭代发生变化,你需要以当前官方文档为准。我这边的操作思路大致是这样的:
bash复制npm install @react-native-oh-tpl/react-native-harmony
