前言

React Native 是一个流行的跨平台移动应用开发框架,可以使用 JavaScript 和 React 编写代码,同时运行在 iOS 和 Android 平台上。而 React Native for OpenHarmony(RNOH)将这种能力扩展到了华为的 OpenHarmony 系统。

本文将详细介绍:

  • 如何搭建 RNOH 开发环境
  • 创建一个简单的工具类应用
  • 运行和调试应用的方法
  • 常见问题的解决方案

环境配置参考React Native for OpenHarmony 环境搭建详解


一、开发环境准备

1.1 所需工具清单

工具名称 推荐版本 说明
DevEco Studio 6.0.1.25+ 华为官方 IDE,类似 Android Studio
Node.js 16.x / 18.x JavaScript 运行环境,建议使用 LTS 版本
npm 8.x+ Node.js 包管理器,安装 Node.js 时自动包含
Git 2.30+ 版本控制工具

1.2 环境配置步骤

步骤一:安装 DevEco Studio

访问华为开发者官网下载 DevEco Studio,按照安装向导完成安装。

步骤二:安装 Node.js

下载并安装 Node.js LTS 版本。安装完成后,打开命令行验证:

node -v  # 查看 Node.js 版本
npm -v   # 查看 npm 版本

步骤三:创建项目

使用 RNOH 官方模板创建项目(具体命令参考官方文档)。

1.3 验证环境配置

配置完成后,需要验证以下几点:

Metro 服务启动

npm run dev

看到 “Metro Bundler ready” 提示即为成功。

项目编译通过

在 DevEco Studio 中打开项目,点击编译按钮,确保无报错。

设备连接正常

连接真机或启动模拟器,确保 DevEco Studio 能识别设备。

应用正常运行

点击运行按钮,应用启动后能看到欢迎界面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常见问题:

  • Node.js 版本过高可能导致依赖安装失败,建议使用 18.x 版本
  • 首次编译时间较长,需要下载依赖包,请耐心等待

二、项目实战:口袋工具集

2.1 项目规划

本次实战将创建一个简单的工具集应用,包含以下功能模块:

  • 首页:展示所有工具的卡片入口
  • 计算器:基础四则运算功能
  • 单位转换:长度、重量等单位互转
  • 二维码工具:生成和扫描二维码
  • 便签本:简单的记事功能
  • 设置页:应用配置和关于页面

2.2 项目结构

PocketTools/
├── src/
│   ├── screens/              # 页面组件
│   │   ├── HomeScreen.tsx
│   │   ├── CalculatorScreen.tsx
│   │   └── ...
│   ├── components/           # 通用组件
│   ├── navigation/           # 路由配置
│   ├── utils/                # 工具函数
│   └── constants/            # 常量定义
├── harmony/                  # OpenHarmony 原生代码
├── App.tsx                   # 应用入口
└── package.json              # 项目配置

目录说明:

  • screens:存放页面级组件
  • components:可复用的 UI 组件
  • navigation:页面跳转和路由管理
  • utils:工具函数库
  • constants:全局常量(颜色、字体等)

三、应用运行与调试

3.1 启动开发服务器

启动 Metro

npm run dev

成功启动后会显示:

✔ Metro Bundler ready
✔ Listening on http://localhost:8081

3.2 运行应用

方式一:使用命令行

npm run harmony

方式二:使用 DevEco Studio

  1. 打开 DevEco Studio

  2. 选择 harmony/ 目录作为项目根目录

  3. 连接设备或启动模拟器

  4. 点击运行按钮(绿色三角形)

运行成功界面在这里插入图片描述

3.3 常见问题排查

问题现象 可能原因 解决方案
Metro 无法启动 端口被占用 关闭占用 8081 端口的程序
设备连接失败 USB 调试未开启 开启开发者模式和 USB 调试
应用白屏/闪退 代码错误 查看 Metro 日志定位错误
热更新不生效 缓存问题 执行 npm start -- --reset-cache

四、遇到的问题

4.1 组件导入导出不一致

问题描述

运行应用时出现以下错误:

Error: Element type is invalid: expected a string or a class/function 
but got: undefined.

原因分析

这个错误通常是因为组件的导入方式和导出方式不匹配导致的。

错误示例:

// HomeScreen.tsx - 使用默认导出
export default function HomeScreen() { ... }

// SettingsScreen.tsx - 使用命名导出
export function SettingsScreen() { ... }

// 导入时
import { HomeScreen } from './HomeScreen';  // ❌ 错误
import { SettingsScreen } from './SettingsScreen';  // ✅ 正确

解决方案

统一使用命名导出(推荐):

// 所有组件文件统一使用命名导出
export function HomeScreen() {
  return <View>...</View>;
}

export function SettingsScreen() {
  return <View>...</View>;
}

// 创建统一导出文件 screens/index.ts
export { HomeScreen } from './HomeScreen';
export { SettingsScreen } from './SettingsScreen';

// 导入时
import { HomeScreen, SettingsScreen } from '../screens';

五、学习资源推荐

5.1 官方文档

5.2 社区资源

  • 开源鸿蒙跨平台社区:可以提问和交流
  • CSDN、掘金:有很多开发者分享的经验文章
  • B站:有不少视频教程

5.3 遇到问题怎么办

  1. 查看错误提示:大多数错误信息都会指明问题所在
  2. 搜索引擎:复制错误信息搜索,通常能找到解决方案
  3. 社区提问:在开发者社区提问时,记得附上完整的错误信息和相关代码
  4. 查看源码:有时候直接看库的源码能更快找到问题

六、要点回顾

  • 环境配置是第一步,需要安装 DevEco Studio、Node.js 等工具
  • 项目结构清晰,分为页面、组件、工具等模块
  • 开发过程中善用热更新功能,提高效率
  • 遇到问题时,先看日志,再搜索,最后求助社区
  • 注意组件导入导出的一致性,避免常见错误

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐