一个axios的简单封装,支持loader和url params,和@kne/react-fetch保持统一
npm i --save @kne/axios-fetch
@kne/axios-fetch 是一个 axios 的轻量级封装库,提供了更便捷的 API 调用方式和更强大的功能扩展。该库与 @kne/react-fetch 保持接口统一,使得在 React 项目中能够无缝切换。
-
URL 参数模板
- 支持在 URL 中使用
{paramName}
语法 - 自动替换 URL 中的参数占位符
- 简化动态 URL 的构建
- 支持在 URL 中使用
-
统一的错误处理
- 集中式错误处理机制
- 可自定义错误处理逻辑
- 支持全局错误拦截
-
灵活的拦截器
- 支持请求和响应拦截器
- 可自定义拦截器注册逻辑
- 方便进行请求/响应的预处理和后处理
-
默认请求头管理
- 支持动态设置默认请求头
- 便于统一管理认证信息
- 灵活的请求头配置机制
-
Loader 功能
- 支持数据模拟加载
- 便于开发和测试
- 无缝切换真实请求和模拟数据
-
表单数据支持
- 提供 postForm 方法
- 自动处理表单数据格式
- 简化表单提交流程
- 需要统一管理 API 请求的项目
- 需要处理复杂 URL 参数的场景
- 需要统一错误处理的应用
- 需要灵活配置请求/响应拦截的系统
- 需要支持数据模拟的开发环境
- 需要处理表单提交的应用
.ant-card {
border-color: black;
text-align: center;
width: 200px;
}
- 这里填写示例标题
- 这里填写示例说明
- _AxiosFetch(@kne/current-lib_axios-fetch)[import * as _AxiosFetch from "@kne/axios-fetch"],antd(antd)
const { default: axiosFetch } = _AxiosFetch;
const { Button } = antd;
const ajax = axiosFetch();
const BaseExample = () => {
return (
<div>
<Button
onClick={() => {
ajax({
loader: async () => {
return await new Promise(resolve => {
setTimeout(() => {
resolve('请求成功');
}, 1000);
});
}
}).then(({data}) => {
console.log(data);
alert(data.data);
});
}}>
点击发送请求
</Button>
</div>
);
};
render(<BaseExample />);
创建一个 axios 实例的封装。
options
: ObjectbaseURL
: String - API 的基础 URLerrorHandler
: Function - 错误处理函数registerInterceptors
: Function - 注册拦截器的函数getDefaultHeaders
: Function - 获取默认请求头的函数defaultError
: String - 默认错误信息showResponseError
: Function - 判断是否显示响应错误的函数getResponseError
: Function - 获取响应错误信息的函数...axiosOptions
- 其他 axios 配置选项
返回一个封装后的 ajax 函数,具有以下特性:
-
ajax(params)
: 发送请求的主函数params.loader
: Function - 可选的数据加载函数params.urlParams
: Object - URL 参数对象params.url
: String - 请求 URL- 其他 axios 请求配置
-
ajax.postForm(config)
: 发送表单数据的便捷方法config.url
: String - 请求 URLconfig.params
: Object - 查询参数config.data
: Object - 表单数据config.urlParams
: Object - URL 参数对象- 其他 axios 请求配置
-
ajax.baseURL
: String - 基础 URL -
ajax.parseUrlParams
: Function - URL 参数解析函数
支持在 URL 中使用 {paramName}
语法,这些参数将被 urlParams
对象中的对应值替换:
ajax({
url: '/users/{userId}/posts/{postId}',
urlParams: {
userId: '123',
postId: '456'
}
});
// 将请求 /users/123/posts/456
支持使用 loader 函数来模拟请求:
ajax({
loader: () => {
return new Promise((resolve) => {
resolve({ name: 'John' });
});
}
});
// 返回 { data: { code: 0, data: { name: 'John' } } }
默认的错误处理逻辑:
- 非 200 状态码
- 响应数据中 code 不为 0
- 请求发生错误
可以通过 showResponseError
和 getResponseError
选项自定义错误处理逻辑。