RNOH 平台行为差异分析技能不迷路
产出一篇结构化分析文档,追踪行为差异在 RN/RNOH 调用栈中的传递路径,对比三端处理方式,仅在确有依据时提出可落地的对齐方案。核心价值是对比视角与判断——并非所有平台差异都是 bug。
按需加载:三种输出结构模板(Bug / 平台特性 / API 限制)与 Mermaid 图表规范 → references/output-templates.md;分析细则、方案设计原则、常见误区 → references/analysis-guide.md
核心原则:先分类差异性质
| 类别 | 定义 | 是否修复 |
|---|---|---|
| RNOH Bug | RNOH 适配层未实现 RN 文档约定的跨平台契约(默认值映射缺失、回调链断裂) | ✅ 修复适配层 |
| 平台特性 | 各平台原生 API / UI 惯例天然不同(如 iOS blur delegate vs ArkUI 回车键不 blur) | ⚠️ 仅当对齐显著提升 DX 且不违背原生惯例 |
| 原生 API 限制 | @ohos API 缺少 iOS/Android 等价能力(如 WebSocket open 无 protocol 字段) | ✅ 适配层做 workaround |
判定:RN JS 文档明确定义了跨平台行为、而 Harmony 因 RNOH 遗漏偏离约定 → Bug;RN 把行为留作平台相关、或差异源于根本不同的原生交互模型 → 平台特性。判定流程图见 references/output-templates.md。
环境准备(强制,未完成不得继续)
必须先向用户询问项目路径,不要假设或自动搜索工作区路径:
| 信息 | 用途 | 无本地路径时 |
|---|---|---|
| RNOH 项目路径 | ohos_react_native 本地源码 | 用 https://atomgit.com/CPF-RN/ohos_react_native 在线读(webfetch blob/master/{path}) |
| RN 项目路径 | react-native 本地源码 | 用 https://github.com/facebook/react-native 在线读 |
| 输出目录 | 分析文档保存位置 | 再次询问,默认当前工作区根目录 |
源码阅读策略:两个路径都有 → 本地读(推荐);缺一个 → 缺的平台 webfetch 在线读;全缺 → 全在线。在线引用标注 [在线源码],webfetch 可能缺精确行号,用近似区间或章节标题代替。在线阅读也要读真实源码,不得猜测编造。
研究流程(不要直接动笔写文档)
- 定位行为入口:在可用代码库中搜索用户提到的 JS API / 组件 / TurboModule,找到 JS 调原生的入口(TurboModule spec 或组件 props 定义);
- 三端追踪调用链:JS prop/method → TurboModule bridge → 原生适配 → 平台原生 API。逐层阅读真实源码,聚焦各端产生该行为的机制;
- 判断差异性质:JS 层是否定义了预期行为?Harmony 偏离是 RNOH 未映射 RN 语义,还是 ArkUI 原生模型根本不同?"修复"是否违背 Harmony 原生 UX 惯例?
- 核验代码引用:每条引用必须指向实际读过的文件和行,找不到标
[待确认]——编造的引用比缺失引用更糟。
分析与分类
每条差异分析必须回答:What(差异是什么,JS 可观察行为)、Why(各端机制)、Where(file:line 精确定位)、分类(Bug / 特性 / API 限制)及分类依据(引用 RN 文档或原生惯例)。
RNOH 常见分叉模式(完整表见 references/analysis-guide.md):平台守卫缺失(Platform.OS === 'ios' 未检查 'harmony')→ Bug;适配层跳过默认值/枚举映射 → Bug;回调时序不一致 → 视 RN 契约是否规定顺序定为 Bug 或特性;原生交互模型差异 → 平台特性;@ohos API 缺能力 → API 限制。
何时提出修复
仅当同时满足:① RN JS 文档明确约定了跨平台契约且 Harmony 违反;② 偏离由 RNOH 遗漏导致(非 API 限制);③ 修复能改善 DX 且不破坏 Harmony 原生 UX。
不提修复:差异是合理平台特性 / 修复会覆盖 Harmony 原生交互模型 / RN 文档把行为留作平台相关——此时仅记录差异、解释成因与开发者影响,可建议 JS 层适配模式。
修复策略(适用时):上游 RN 代码补平台守卫加 'harmony';补充 RNOH 适配映射;绕过 API 限制(缓冲事件、重排回调、从零实现)。
平台对比要求
比较的是机制差异,不只是 API 名字——它解释差异为什么存在。每端覆盖:核心机制、回调/事件时序、与 RN 语义的映射、JS 侧影响、是否平台原生特性。
⚠️ 平台对比只比机制,不混入版本对比——RNOH 版本间差异属根因分析内容。
输出
MANDATORY - READ ENTIRE FILE:写文档前必须先完整阅读 references/output-templates.md(A/B/C 三种结构模板 + 判定流程图 + 图表规范)。
- 结构按分类选择(A/B/C 模板见 references/output-templates.md);
- Mermaid 图:调用链用
flowchart TB标注差异落点;各平台时序图必须独立(每平台一张sequenceDiagram,不合并三端);Bug 标❌、特性⚠️、正常✅,断裂路径用虚线;样式约定见 references/analysis-guide.md; - 保存到环境准备阶段收集的输出目录,文件名用描述性主题(如
TextInput_onEndEditing触发时机平台差异分析.md); - 正文 zh-CN,技术标识符/类名/API 名/代码引用保留英文。
常见误区
详见 references/analysis-guide.md。核心几条:不要把每个差异都判为 bug;不要把三端时序图合并成一张;不要把版本对比混入平台对比;不要只比 API 签名不比机制;不要跳过代码核验;不要提出不指定文件/行号/改动的空泛方案;不要对平台特性强推修复。
更多推荐

所有评论(0)