Remix v2路由系统求助:按业务场景拆分路由实现遇阻
Remix v2路由按业务场景拆分问题求助
我是Remix新手,使用v2路由系统时遇到了麻烦:默认把所有路由放在基础文件夹的方式,在路由数量多了之后变得非常混乱。我想按业务场景用文件夹来拆分路由,参照官方的「folders-for-organization」方案尝试实现但没成功,目前只能通过@remix-run/v1-route-convention包配置Remix,沿用v1的路由方式作为临时方案,希望能得到解决办法。我基于Remix教程模板做了示例项目。
正确实现v2按业务场景拆分路由的方法
- 核心规则:v2的路由文件夹仅用于代码组织,不会直接生成路由路径,路由路径由
route.tsx(或_route.tsx)文件的位置、文件名中的$(动态参数)和_(忽略路径段)前缀决定。 - 按业务模块创建独立文件夹,比如
app/routes/user/、app/routes/order/ - 在业务文件夹内创建对应路由文件:
- 示例:
app/routes/user/profile/route.tsx对应访问路径/user/profile - 示例:
app/routes/order/$orderId/route.tsx对应动态路径/order/123
- 示例:
- 嵌套路由必须确保父路由包含
<Outlet />组件,比如app/routes/user/route.tsx中要引入并渲染<Outlet />,否则子路由的内容无法显示。
常见失败原因排查
- 误以为文件夹名会自动生成路由路径:v2中文件夹只是分组用,必须存在
route.tsx文件才会生成对应的路由 - 嵌套路由缺少父路由的
<Outlet />:子路由内容无法渲染,导致看起来配置无效 - 混用v1路由命名规则:比如用
index.tsx代替route.tsx作为主路由,v2中index.tsx仅作为父路由的默认子路由,需要配合父级route.tsx使用
移除v1路由包的迁移步骤
如果要彻底切换到v2路由规范,替换临时方案的步骤:
- 删除
remix.config.js中关于@remix-run/v1-route-convention的配置代码 - 将所有v1风格的路由文件(比如
app/routes/user-profile.tsx)迁移到对应业务文件夹,并重命名为route.tsx - 检查所有嵌套路由的父组件,确保添加了
<Outlet /> - 启动项目,逐一测试各路由是否正常访问
内容的提问来源于stack exchange,提问作者Nicolas HELIE
相关产品推荐
相关产品推荐

