
并非传统请求库,而是请求策略引擎(仅 4KB,Axios 的 30% 体积),专注通过智能策略优化请求体验:内置缓存、请求去重、自动重试等功能,支持 Vue/React/Svelte 多框架,适配 H5、小程序等全端场景。可理解为 “给请求库装了智能大脑”,让 axios/fetch 焕发新能力。
alova 的官方适配器,实现alova 与 axios 的无缝对接。解决 alova 原生不直接支持 axios 生态的问题,让开发者既能用 alova 的策略能力,又能复用 axios 的拦截器、撤销请求等成熟功能。
alova 专属的 mock 适配器,在本地模拟请求行为(不发真实网络请求),支持自定义响应、模拟延迟、日志打印,专为前端独立开发和测试设计,无需依赖后端接口即可推进开发。
传统 axios 开发需手动处理:
// 传统封装痛点:重复写loading/error/缓存逻辑 const useAxiosRequest = (url) => { const loading = ref(false); const data = ref(null); const fetch = async () => { loading.value = true; try { const res = await axios.get(url); data.value = res.data; } catch (e) { /* 错误处理 */ } loading.value = false; }; return { loading, data, fetch }; }; |
alova 一键解决:
// 内置状态管理+策略,代码减少60% const { loading, data, error } = useRequest( alovaInstance.Get('/todoList') ); |
核心解决:请求状态混乱、重复封装、缓存缺失、竞态问题(如重复请求)。
// 1. 引入依赖 import { createAlova, useRequest } from 'alova'; import { axiosRequestAdapter } from '@alova/adapter-axios'; import { createAlovaMockAdapter } from '@alova/mock'; import axios from 'axios'; // 2. 创建axios实例(复用原有配置) const axiosInstance = axios.create({ baseURL: 'https://api.example.com', timeout: 5000 }); // 3. 配置mock(开发环境启用) const mockAdapter = createAlovaMockAdapter( { '/todoList': () => ({ code: 200, data: [{ id: 1, text: '学习alova' }] }) }, { enable: process.env.NODE_ENV === 'development', // 环境控制 httpAdapter: axiosRequestAdapter(axiosInstance), delay: 800, // 模拟网络延迟 mockRequestLogger: true // 打印mock日志 } ); // 4. 初始化alova const alovaInstance = createAlova({ statesHook: VueHook, // 适配Vue3 requestAdapter: mockAdapter, // 注入mock适配器 beforeRequest: method => { // 全局请求拦截(替代axios拦截器) method.config.headers.token = localStorage.getItem('token'); } }); |
import { usePagination } from '@alova/scene-vue'; const { data, currentPage, loadMore } = usePagination( page => alovaInstance.Get('/articles', { params: { page } }), { perPage: 10 } ); |
const { send, loading } = useRequest( alovaInstance.Post('/submit', { data: form }), { silentSubmit: true } // 开启静默提交 ); |
'/user/:id': ({ params }) => ({ code: 200, data: { id: params.id, name: `用户${params.id}` } }) |
问题场景 | 缘由分析 | 解决方案 |
mock 报错 “TypeError: Cannot read properties of undefined” | onMockResponse 返回格式错误,需包含 response 和 headers | 1. 简单场景可不配置 onMockResponse(alova 内置支持)2. 复杂场景按规范返回:{ response: data, headers: {} } |
mock 抛错仍显示 “请求成功” | alova 3.0.0-beta.6 版本日志逻辑缺陷 | 升级 alova 至 3.0.0-beta.7+,修复后错误会正确传播 |
适配器不生效 | axios 版本与适配器不兼容 | 确保 axios ≥ 0.24.0,适配器使用 @alova/adapter-axios ≥ 2.0.0 |
小程序包体积超标 | 引入完整 axios 导致 | 1. 使用 axios-miniprogram 版2. 配置 tree-shaking 剔除无用代码 |
缓存数据不更新 | 默认开启强缓存未配置失效策略 | 1. 设置cacheFor: 5 * 60 * 1000(5 分钟过期)2. 提交后主动失效:updateState({ cache: null }) |
重复请求未合并 | 未开启 dedupe 配置 | 全局或单个请求开启:createAlova({ dedupe: true }) |
生产环境 mock 未关闭 | 环境判断逻辑错误 | 改用process.env.NODE_ENV === 'development'严格判断 |
类型提示缺失 | 未定义请求响应类型 | 用 TypeScript 声明:alovaInstance.Get<User>('/user') |
这套 “策略引擎 + 适配器 + mock 工具” 的组合,正在重构前端请求开发模式。你在使用中遇到过哪些问题?欢迎在评论区交流!