# 导航工具迁移指南 ## 🎯 迁移目标 将项目中的 `Taro.navigateTo`、`Taro.switchTab` 等调用替换为新的导航工具函数。 ## 📋 迁移对照表 ### 1. 基础导航 ```typescript // 旧写法 ❌ Taro.navigateTo({ url: '/pages/product/detail' }) // 新写法 ✅ goTo('product/detail') ``` ### 2. 带参数导航 ```typescript // 旧写法 ❌ Taro.navigateTo({ url: `/pages/search/index?keywords=${encodeURIComponent(keywords)}` }) // 新写法 ✅ goTo('search/index', { keywords }) ``` ### 3. TabBar 页面 ```typescript // 旧写法 ❌ Taro.switchTab({ url: '/pages/index/index' }) // 新写法 ✅ switchTab('index/index') ``` ### 4. 页面替换 ```typescript // 旧写法 ❌ Taro.redirectTo({ url: '/pages/login/index' }) // 新写法 ✅ redirectTo('login/index') ``` ### 5. 重新启动 ```typescript // 旧写法 ❌ Taro.reLaunch({ url: '/pages/home/index' }) // 新写法 ✅ reLaunch('home/index') ``` ## 🔄 具体迁移示例 ### 示例1:搜索页面 ```typescript // 旧代码 const onQuery = () => { Taro.navigateTo({ url: `/shop/search/index?keywords=${encodeURIComponent(keywords.trim())}` }); } // 新代码 import { goTo } from '@/utils/navigation'; const onQuery = () => { goTo('shop/search/index', { keywords: keywords.trim() }); } ``` ### 示例2:商品详情 ```typescript // 旧代码 const viewProduct = (productId: number) => { Taro.navigateTo({ url: `/pages/product/detail?id=${productId}&from=list` }); } // 新代码 import { goTo } from '@/utils/navigation'; const viewProduct = (productId: number) => { goTo('product/detail', { id: productId, from: 'list' }); } ``` ### 示例3:TabBar切换 ```typescript // 旧代码 const goHome = () => { Taro.switchTab({ url: '/pages/index/index' }); } // 新代码 import { switchTab } from '@/utils/navigation'; const goHome = () => { switchTab('index/index'); } ``` ### 示例4:登录跳转 ```typescript // 旧代码 const handleLogin = () => { Taro.redirectTo({ url: '/pages/login/index' }); } // 新代码 import { redirectTo } from '@/utils/navigation'; const handleLogin = () => { redirectTo('login/index'); } ``` ## 🛠️ 批量替换脚本 可以使用以下正则表达式进行批量替换: ### 1. 简单导航替换 ```bash # 查找 Taro\.navigateTo\(\{\s*url:\s*['"`]([^'"`]+)['"`]\s*\}\) # 替换为 goTo('$1') ``` ### 2. switchTab替换 ```bash # 查找 Taro\.switchTab\(\{\s*url:\s*['"`]([^'"`]+)['"`]\s*\}\) # 替换为 switchTab('$1') ``` ### 3. redirectTo替换 ```bash # 查找 Taro\.redirectTo\(\{\s*url:\s*['"`]([^'"`]+)['"`]\s*\}\) # 替换为 redirectTo('$1') ``` ## 📦 导入语句 在每个需要使用导航的文件顶部添加: ```typescript import { goTo, switchTab, redirectTo, reLaunch, goBack } from '@/utils/navigation'; ``` ## ⚠️ 注意事项 ### 1. 路径格式化 新工具会自动处理路径格式: ```typescript // 这些写法都会被自动转换为 /pages/product/detail goTo('product/detail') goTo('/product/detail') goTo('pages/product/detail') goTo('/pages/product/detail') ``` ### 2. 参数处理 ```typescript // 旧写法需要手动编码 const url = `/pages/search?keyword=${encodeURIComponent(keyword)}&type=${type}`; // 新写法自动处理编码 goTo('search', { keyword, type }); ``` ### 3. 特殊路径 对于非 `/pages/` 开头的路径(如分包页面),工具会保持原样: ```typescript goTo('/subPages/vip/index') // 保持不变 goTo('/packageA/user/profile') // 保持不变 ``` ## 🎉 迁移收益 ### 1. 代码更简洁 ```typescript // 旧:42个字符 Taro.navigateTo({ url: '/pages/product/detail' }) // 新:22个字符 goTo('product/detail') ``` ### 2. 参数处理更方便 ```typescript // 旧:需要手动拼接和编码 const url = `/pages/search?q=${encodeURIComponent(query)}&page=${page}`; Taro.navigateTo({ url }); // 新:自动处理 goTo('search', { q: query, page }); ``` ### 3. 错误处理更统一 ```typescript // 新工具自动包含错误处理 goTo('some/page').catch(error => { // 自动显示错误提示 }); ``` ### 4. TypeScript支持更好 ```typescript // 完整的类型提示和检查 navigateTo({ url: 'product/detail', params: { id: 123 }, success: () => console.log('成功'), fail: (error) => console.error(error) }); ``` ## 📋 迁移检查清单 - [ ] 替换所有 `Taro.navigateTo` 调用 - [ ] 替换所有 `Taro.switchTab` 调用 - [ ] 替换所有 `Taro.redirectTo` 调用 - [ ] 替换所有 `Taro.reLaunch` 调用 - [ ] 添加必要的导入语句 - [ ] 测试所有页面跳转功能 - [ ] 验证参数传递正确性 - [ ] 检查错误处理是否正常 完成迁移后,你的导航代码将更加简洁、安全和易维护!