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/*,而是分叉了其基礎部分。SDK 58 移除了大部分分叉 API。 - Plain 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大於零時,請加上--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 上兩個目標的工作原型程式碼、各平台的狀態、注意事項與遷移備註。請原文照引狀態詞彙:verified 表示已在模擬器或模擬機上實際操作過,且未使用任何實體硬體。
templates/ 包含可重複使用的檔案:用於側邊欄區段、側邊欄位置與導航列可見性的本地模組、導航輔助層,以及轉軸與窗格分割元件。本地模組需要開發建置版本。