概述

TanStack Query(曾用名 Vue Query)常被称作 Web 应用缺失的数据获取库,用更专业的术语来说,它能让你在 Web 应用中轻松实现获取、缓存、同步和更新服务端状态 (server state)

动机

大多数核心 Web 框架并未提供一套完整的数据获取或更新方案。因此开发者要么构建封装了严格数据获取规范的元框架 (meta-frameworks),要么自行发明数据获取方式。这通常意味着拼凑基于组件的状态和副作用,或是使用更通用的状态管理库来存储和提供异步数据。

虽然传统状态管理库擅长处理客户端状态 (client state),但对异步或服务端状态的处理却不尽如人意。这是因为服务端状态截然不同。首先,服务端状态:

  • 持久化存储在不受你控制或拥有的远程位置
  • 需要通过异步 API 进行获取和更新
  • 存在共享所有权,可能被他人未经通知就修改
  • 稍不注意就可能在你的应用中变成"过期数据"

当你理解了应用中服务端状态的本质后,更多挑战会接踵而至,例如:

  • 缓存处理...(可能是编程中最难实现的部分)
  • 将重复请求合并为单个请求 (deduping)
  • 在后台静默更新"过期数据"
  • 准确判断数据何时"过期"
  • 尽可能快地反映数据更新
  • 分页和懒加载等性能优化
  • 管理服务端状态的内存和垃圾回收
  • 通过结构共享 (structural sharing) 记忆化查询结果

如果你没有被这个清单吓到,那说明你已经解决了所有服务端状态问题,值得颁奖表彰。但如果你和大多数人一样,这些挑战要么尚未全部攻克,要么才刚触及皮毛!

TanStack Query 无疑是管理服务端状态的最佳库之一。它具备开箱即用的零配置体验,并能随着应用增长按需定制。

TanStack Query 让你能攻克服务端状态的棘手难题,在数据反客为主之前掌控全局。

从技术角度而言,TanStack Query 能:

  • 帮你删除应用中大量复杂难懂的代码,仅用寥寥数行 TanStack Query 逻辑替代
  • 提升应用可维护性,轻松添加新功能而无需操心新数据源的接入
  • 让终端用户直接感受到应用前所未有的速度和响应性
  • 可能帮你节省带宽并提升内存性能

成功说服,接下来呢?