用途:TanStack Router 将路由代码分为“关键代码”(匹配路由并开始加载所必需)与“非关键代码”(可懒加载)。本技能说明如何自动或手动做代码分割,以减小主包体积。
主要能力与约定:
- 自动分割:在打包插件中开启 autoCodeSplitting: true,路由文件会被自动转换,组件拆成独立 chunk,loader 留在主包,无需 .lazy.tsx 文件。
- 手动分割:无法使用自动分割时(如仅 CLI、无打包插件),用 createLazyFileRoute 拆出 posts.lazy.tsx;仅支持 component、errorComponent、pendingComponent、notFoundComponent。
- 虚拟路由:若关键路由文件为空可直接删除,routeTree.gen.ts 会自动生成虚拟路由。
- 代码式路由:用 createLazyRoute 与 .lazy() 方法。
- getRouteApi('/path'):在分割文件中访问类型化 hooks,提供 useLoaderData、useLoaderDeps、useMatch、useParams、useRouteContext、useSearch;应避免 import { Route }。
- 分割粒度控制:路由内 codeSplitGroupings,或全局 codeSplittingOptions 的 defaultBehavior、splitBehavior;优先级为 codeSplitGroupings > splitBehavior > defaultBehavior。
关键限制与常见错误:
- 绝不要从路由文件导出组件函数,导出会使组件进入主包,彻底绕过代码分割。
- loader 默认不分割(已异步,分割会带来两次异步瀑布)。
- __root.tsx 不支持代码分割,勿创建 __root.lazy.tsx。
- 分割文件中用 getRouteApi 取类型化 hooks,不要导入 Route。
适用场景:使用 TanStack Router 并关注首屏包体积与按路由懒加载的 React 项目。
说明:资料来源未提供价格、平台兼容性等更多信息。