TanStack Router 是一款为构建 React 和 Solid 应用而生的路由库。其核心特性包括:
快速入门请前往下一页。若需深入了解,请做好准备,我将带您全面解析!
在技术选型中,使用路由库构建应用已被视为必备选择,通常也是您技术栈中的首要决策之一。
那么,为何要选择 TanStack Router 而非其他方案?
要回答这个问题,我们需要审视当前生态中的其他选项。虽然仔细寻找会有许多选择,但根据经验,真正值得深入研究的仅有少数:
这些框架(及其路由方案)都很优秀,我个人可以证明它们都是构建 React 应用的优质解决方案。但经验也告诉我,这些方案尤其在路由 API 方面仍有巨大提升空间——开发者需要这些 API 来让应用更快、更简单、更愉悦。
毫不意外,选择路由库如此重要,以至于它通常与框架选择紧密绑定,因为多数框架都依赖特定的路由方案。
这是否意味着 TanStack Router 是一个框架?
传统意义上,TanStack Router 并非“框架”,因为它不涉及其他常见的全栈关注点。但它的设计允许通过与处理打包、部署和服务端功能的工具结合,升级为全栈框架。为此我们正在开发 TanStack Start——一个基于 TanStack Router 及 Nitro、Vite 等工具构建的全栈框架。
若想深入了解 TanStack Router 的历史,可阅读 TanStack Router 发展历程。
TanStack Router 满足您对其他路由库的所有基本期待:
同时它还带来提升标准的新特性:
让我们深入探讨其中几个重要特性!
如今所有项目都宣称“用 TypeScript 编写”或至少提供类型定义,但真正为 TypeScript 设计 API 的生态包却寥寥无几。虽然您的路由库能自动补全选项字段并捕捉一些属性/方法拼写错误,但潜力远不止于此。
这对您意味着:
搜索参数常被事后考虑,被视为可解析更新的字符串黑箱(或字符串数组),仅此而已。现有方案并非类型安全,增加了处理它们的谨慎需求。即使最“现代”的框架和路由库也将管理此状态的工作留给您。它们可能将搜索字符串解析为对象,或让您用 URLSearchParams 自行处理。
但请记住:搜索参数是您应用中功能最强大的状态管理器。它们是全局的、可序列化、可书签化且可分享的,是存储需持久化或社交分享状态的完美场所。
为承担这一责任,搜索参数在 TanStack Router 中是一等公民。基于标准 URLSearchParams 的同时,它通过强大解析器/序列化器管理更深层复杂的数据结构,同时保持类型安全和易用性。
就像在 URL 中拥有 useState!
搜索参数具备:
一旦使用 TanStack Router 的搜索参数,您将惊叹以往如何能缺少它们。
数据加载是任何应用的关键部分,虽然多数路由库提供关键数据加载 API,但在缓存和数据生命周期管理上常有不足。现有方案存在几个通病:
TanStack Router 通过双重策略解决这些问题:
提供轻量级内置缓存层,与路由无缝协作。此缓存层松散基于 TanStack Query,但功能更少、API 更精简。与 TanStack Query 类似,合理而强大的默认值确保数据被缓存复用、适时失效、闲置时垃圾回收,并提供手动失效 API。
设计上便于与现有数据获取库(如 TanStack Query、SWR、Apollo、Relay 或自定义方案)集成。context、beforeLoad、loaderDeps 和 loader 等可配置 API 协同工作,轻松定义声明式数据依赖、预加载数据并管理外部数据源生命周期。
TanStack Router 的路由上下文是强大功能,允许定义特定于路由的上下文,并被所有子路由继承。路由器和根路由本身也能提供上下文。上下文可同步或异步构建,用于共享数据、配置甚至函数。这在以下场景特别有用:
当然,路由上下文也完全类型安全且零成本推断。
TanStack Router 同时支持基于文件和代码的路由。这种灵活性让您选择最适合项目需求的方式。
其文件路由方案独特地面向用户:路由配置由 Vite 插件或 CLI 生成,但生成代码的使用完全由您掌控!这意味着即使使用文件路由,您也始终完全掌握路由和路由器。
TanStack Router 借鉴了许多 OSS 项目的理念与模式,包括:
我们认可这些项目开发中的投入、风险和研究,并期待将它们设立的标准推向更高。
概述已足够,TanStack Router 还有更多可能。点击下一页,让我们启程!
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.