直观对比React Query 提供基础构件,alova 提供完整方案同一个分页列表,并排对比;不谈孰优孰劣,只比代码量。
React Query / hand-written~25 lines
const [page, setPage] = useState(1);const queryClient = useQueryClient();const { data, isPreviousData } = useQuery({queryKey: ['todos', page],queryFn: () => fetch(`/api/todos?page=${page}`).then(r => r.json()),keepPreviousData: true});// manual pre-fetch of next pageuseEffect(() => {queryClient.prefetchQuery({queryKey: ['todos', page + 1],queryFn: () => fetch(`/api/todos?page=${page + 1}`).then(r => r.json())});}, [page, data]);// manual delete + cache syncconst del = useMutation({mutationFn: id => fetch(`/api/todos/${id}`, { method: 'DELETE' }),onSuccess: () => queryClient.invalidateQueries(['todos'])});// manual add + cache syncconst add = useMutation({mutationFn: body => fetch('/api/todos', {method: 'POST', body: JSON.stringify(body)}),onSuccess: () => queryClient.invalidateQueries(['todos'])});
alova · usePagination~5 lines
const todoList = (page, size) =>alova.Get('/api/todos', { params: { page, size } });const { loading, data, page, pageSize, pageCount, total } =usePagination(todoList);// auto paging · preload · add/remove sync
请求策略别再手写请求逻辑,直接使用策略alova 提供 20+ 请求策略——面向客户端、服务端、跨组件场景的完整业务模块。选一个,马上上线。
客户端策略
内置的 hooks,替代你在 React Query / axios 里手写的样板代 码。
自动管理分页数据、预加载下一页并减少无效刷新,流畅度提升 300%,编码量减少 50%。
const todoList = (page, size) =>alova.Get('/todos', { params: { page, size } });const { loading, data, page, pageSize, pageCount, total } =usePagination(todoList);
状态变化立即发送请求,这在标签页切换与条件查询中尤为实用。
useWatcher(() => alova.Get(`/rewards/${activeKey}`),[activeKey],{debounce: [500, 0]})
预加载数据以更快地显示视图,或跨组件重新拉取数据
const { fetching, error, fetch } = useFetcher()fetch(alova.Get('/todo/1'))
支持无感刷新 Token 的全局拦截器,并统一管理基于令牌的登录、登出、令牌分配与刷新。
const { onAuthRequired, onResponseRefreshToken } = createServerTokenAuthentication({refreshTokenOnError: {isExpired: res => res.status === 401,handler: async () => {const { token, refresh_token } = await refreshToken()localStorage.setItem('token', token)localStorage.setItem('refresh_token', refresh_token)}}})const alovaInstance = createAlova({beforeRequest: onAuthRequired(),responded: onResponseRefreshToken()})
服务端策略
服务端控制——重试、限流、原子化请求等——无需额外中间件。
在重要的请求上使用它,可以提高请求的稳定性
const res = await retry(alova.Post('/api/order'), {retry: 3,backoff: {delay: 1000,multiplier: 2}})
在限定时间内控制请求频率。
const limit = createRateLimiter({points: 4,duration: 60 * 1000})const orderRes = await limit(alova.Get('/api/order'))
跨组件,免接线
在任意组件中触发并同步请求——无需层层传递 props,也无需引入全局状态管理。
OpenAPI 生成代码 · 由 worma 驱动一份 OpenAPI 规范,从人类到 AIworma 是一个独立的 OpenAPI 代码生成工具,对 alova 开箱即用。只要有一份接口规范,它就能生成类型安全的运行时代码、TypeScript 类型、文档和 AI 知识——在编辑器里直接获得接口提示、悬浮查看文档,还能一键插入调用代码。(同时也支持 axios、ky 与 fetch。)
灵活性与任何请求工具在任何JS环境下运行alova 的 use hooks 最初是为函数式组件设计的,但它同样兼容 Vue(options) 与 class 风格(如 Angular)的 UI 框架,这意味着你几乎可以在任何 JS 环境、任何 UI 框架中使用,还能搭配你熟悉的请求工具。
受信赖,且诚实为真实应用而生——诚实告诉你什么时候不该用它
什么时候不该用 alova?
继续用 React Query / axios,当
- 你只需要简单的增删改查 + 基础缓存
- 你的团队已经统一使用其中一个
- 项目很小,请求逻辑极简
alova 胜出,当
- 你想开箱即用减少 70% 请求代码
- 复杂中后台 / BFF(接口聚合层)/ 跨端 / 服务端控制
- 你需要内置策略(分页、鉴权、重试、SSE 服务端推送等)
加入社区已在真实生产环境中使用正在使用 alova 的开源项目
Scott Hualova创建者
像fetch和axios这样的请求库使请求变得非常简单,react-query和swr又进一步减少了请求的模板代码。但alova的目标是 提供极致的API消费效率,消除几乎所有的请求工作,实现更高效的客户端-服务器数据交互
ProddyThe author of EMS-ESP
I'm loving this library and slowly migrating my code from Axios to Alova.
0x1EC10DDeveloper
alova是真的很细致,我看文档的时候每一个点都是痛点,解决了超多问题
Ah jungAuthor of Naive Admin
alovajs很不错。我打算将我们的产品统一换成alovajs
Alova 团队认识核心成员



