跳到主要内容
版本:v3

与其他库比较

react-query / swr 与 alova 的区别​

在比较之前,先厘清一个常被混淆的点:react-query、swr 和 alova 并不在同一个概念层级上,下面从它们各自解决的问题说起。

它们各解决什么问题​

react-query 和 swr 是成熟的异步状态管理 / 数据请求库。它们关注的是"如何把服务端数据同步到客户端 UI",即你提供一个获取数据的函数,它们负责缓存、重新验证、后台刷新,让你的组件始终拿到最新的服务端状态。

alova 是一个请求策略库,它把一次请求看作一个有完整生命周期的场景,即请求场景模型 RSM,而不是一次瞬时的调用。一次请求被拆成四个阶段,每个阶段回答一个问题:

  • 请求触发:什么条件下产生了数据交互需求?初始化、状态变化、防抖、轮询、失败重试……
  • 请求决策:这次需求要不要真的发送请求?命中缓存、复用请求、挂起等待、丢弃过期响应……
  • 请求执行:如何通信并获得响应?交给 axios / fetch / XHR,通常只有一行代码。
  • 数据应用:数据如何进入业务、状态与视图?转换、跨组件同步、缓存沉淀……

你日常花最多时间写的请求代码,往往不在"请求执行"(它通常只有一行),而在触发、决策、应用这三段散落在组件各处的逻辑里。react-query / swr 很好地解决了其中的"缓存 + 状态同步",但分页、表单、上传、鉴权等场景逻辑,依然要你一遍遍手写。alova 的思路是,把这些反复出现的逻辑整理成可复用的请求策略,让它们从样板代码变成几个配置项。

不同的概念​

维度react-query / swralova
核心定位服务端状态管理 / 数据请求请求策略 / 请求全生命周期管理
关注焦点数据的缓存与同步触发 → 决策 → 执行 → 应用 的完整场景
典型写法useQuery(() => fetch(...))usePagination(() => alova.Get(...), {...})
分页 / 表单 / 上传需自行实现或组合内置为请求策略
鉴权、重试、预取、无感提交部分需自行组合内置为请求策略
站在哪一层包裹你的请求函数架在 axios / fetch 之上,接管请求逻辑

react-query / swr 回答"数据怎么缓存并保持最新",alova 回答"这次请求从产生到落到视图,中间每一步该怎么处理"。 两者关注的问题不一样,因此"谁功能更多"并不是公平的比较方式。

该怎么选​

  • 如果你的需求主要是缓存服务端数据并自动保持同步,react-query 或 swr 是成熟且轻量的选择,生态也经过大量项目验证。
  • 如果你的应用里充斥着分页、表单、上传、鉴权、预取、无感提交等场景,希望把这些重复逻辑从样板代码变成配置,alova 能显著减少你需要维护的请求层代码。

值得一提的是,alova 并不要求你抛弃现有的请求方式,它直接运行在你已有的 axios / fetch 之上,把"请求执行"继续交给它们,只接管 react-query / swr 通常没有覆盖的那部分请求逻辑(触发、决策、应用)。换句话说,它不是 react-query / swr 的替代品,而是从另一个角度解决"请求该怎么写"这件事。

与 axios/fetch/XMLHttpRequest 等传统请求工具对比​

axios/fetch/XMLHttpRequest 等传统的请求工具与下一代请求工具 alova 解决的是不同的问题,前者聚焦于请求发送和接收响应,后者用于提升 API 的消费效率,它们是互相补充的关系,将 alova 与传统请求工具组合使用可以获得更强大的请求特性,我们以 axios 为例。

alova 为 axios 提供自动化请求状态管理​

仅使用 axios 时,通常需要你自行维护请求相关状态,使用 alova 的 use hook 后可以获得自动化的请求状态管理能力。

// vue3代码示例
const loading = ref(false);
const data = ref({});
const error = ref(null);
const request = async () => {
try {
loading.value = true;
data.value = await axios.get('/xxx');
} catch (e) {
error.value = e;
}
loading.value = false;
};
mounted(request);

alova 提供开箱即用的高性能请求策略​

alova 为你提供了多个高性能的请求策略模块,你可以根据不同请求场景使用不同的模块,这是 axios 不具备的。

alova 为 axios 提供响应数据缓存​

alova 分别提供了 3 种缓存模式来满足不同的缓存场景,分别为内存模式、缓存占位模式、恢复模式。它们是组件无关的,只要请求地址和参数相同都可以命中缓存,除非你关闭了它。响应数据缓存可以极大地提高请求流畅性,降低服务端压力。

alova 为 axios 提供请求共享功能​

请求共享在同时发送多个相同请求时,将会复用同一个请求,它也可以提升应用流畅性和降低服务端压力。

alova 为 axios 提供数据预拉取​

提前请求将要使用的数据,也可以极大提升应用流畅性。

alova 可管理请求状态​

你可以使用 alova 跨任意的组件层级来访问其他组件内的状态化数据,这可以让你减少跨组件通信的一些麻烦。