Expo 导航迁移(SDK 58)
三个任务。根据请求选择;迁移计划需要按顺序执行所有三个任务。
| 请求 | 操作 |
|---|---|
| “此仓库中的导航是如何实现的?” | 分析 |
| “规划迁移”、“我们能加个标志吗?”、“React Navigation 还是 @expo/ui?” | 分析,然后规划 |
| “我们正在使用 React Navigation,并希望使用更原生元素和稳定的导航及深度链接库” | 分析,然后规划,使用现有的 React Navigation 方案文档 |
| “如何构建侧边栏/底部弹出面板/Duo 布局?”、“X 能工作吗?” | 在目录中查找 |
本文档全篇使用的目标名称:
- React Navigation 表示基于 react-native-screens 的 Expo Router。从 SDK 56 开始
expo-router不再依赖@react-navigation/*,而是 Fork 了其构建所需的部分。SDK 58 移除了大部分被 Fork 的 API。 - 普通 React Navigation 表示不包含 Expo Router 的
@react-navigation/*7.x。 - @expo/ui 表示 iOS 上的 SwiftUI 和 Android 上的 Jetpack Compose。
仅读取目标仓库。本技能负责规划;除非用户单独请求,否则不会更改任何应用代码。
Expo 每次 SDK 都会变化。此处列出的 API 事实于 2026-11-02 针对 SDK 58 进行了检查。对于目录未显示为已验证的任何即将依赖的 API,请访问 https://docs.expo.dev/versions/v58.0.0/ 获取信息。
分析
- 运行
node <skill>/scripts/inventory-navigation.mjs <repo-root>。它仅读取仓库,并输出带有path:line位置的信号。当某个信号显示truncated大于 0 时,使用--max-locations 200重新运行。 - 遵循 references/analysis.md。填写 templates/analysis-report.md。
当报告中的每一行都有带证据的值,或说明已搜索但未找到,并且每个清单信号都已通过阅读其代码进行确认或排除时,分析任务完成。
规划
遵循 references/migration-planning.md 进行规划。该文档会引用:
- references/target-decision.md:目标之间的推荐
- references/flag-seams.md:标志可以放置的位置,有哪些文档,哪些需要临时测试
- references/no-flag-paths.md:当无法使用标志时的切换方案
- references/api-mapping.md:SDK 跳跃、导入替换、破坏性变更
- references/existing-react-navigation.md:用于原型 N 或 M 中 N 部分的场景:起点、稳定性顺序、深度链接
填写 templates/migration-plan.md。计划始终涵盖带标志的切换、无标志的切换、每个可单独发布和验证的有序步骤,以及一个干净退出步骤,用于移除创建的标志和被替代的内容。计划需要给出一个基于此仓库原因的推荐。该推荐可以是保留当前的导航所有者;当仅 SDK 发生变化时,计划说明没有任何需要标记的内容以及原因。
查找模式
references/pattern-catalog.md 列出了每一种场景及其对应的文件。每个文件都提供了针对 iOS 和 Android 两个目标平台的、来自工作原型的代码,以及每个平台的状态、注意事项和迁移说明。请按原样引用状态词汇:已验证 表示在模拟器或仿真器上测试过,未使用物理硬件。
templates/ 目录存放可复用的文件:用于侧边栏部分、侧边栏位置和导航栏可见性的本地模块、导航辅助层,以及铰链和分屏组件。本地模块需要开发构建。