更新日志
版本历史
hook-fetch
2.3.0
Minor Changes
- 发布 2.3,主要变化:
- 新增 BodyType 并应用到请求/插件泛型,支持 string/FormData/Blob/ArrayBuffer/ReadableStream 等原生 body 直传。
- 优化 upload:支持对象或 FormData 自动转换为 FormData,上传数据类型推导更准确。
- Content-Type 为 text/plain 时保持原始字符串 body,纯文本接口按预期提交。
- 补充本地文件上传与 text/plain 测试用例,覆盖多文件、请求头透传与流式上传中断场景。
2.2.4
Patch Changes
- Improve type safety for streaming API:
- Add generic parameter support to
stream<U = T>()method, allowing type override at stream stage - Improve TypeScript inference: recommend specifying response type at request method level (e.g.,
post<T>()) rather than stream level for better type safety - Update internal type handling in stream implementation for more accurate type narrowing
- Add generic parameter support to
2.2.3
Patch Changes
-
新增请求去重插件并改进错误处理
新增功能
- 请求去重插件 (dedupePlugin): 新增
dedupePlugin用于防止并发的相同请求。插件会根据 URL、HTTP 方法、参数和请求体数据生成唯一标识,当检测到相同标识的请求正在进行时,后续请求会抛出DedupeError- 提供
isDedupeError辅助函数用于判断错误类型 - 支持通过
extra.dedupeAble选项禁用特定请求的去重功能 - ⚠️ 官方不推荐在生产环境中使用,建议通过应用层设计(如禁用按钮、防抖节流、状态管理)来避免重复请求
- 提供
改进
- 类型定义完善: 在
RequestConfig、BaseRequestOptions和OptionProps中添加extra字段支持,允许传递额外的请求配置 - 错误处理优化: 改进 React 和 Vue hooks 的错误处理逻辑,过滤
AbortError和 JSON 解析错误,避免触发不必要的错误回调
文档更新
- 添加请求去重插件的完整文档和使用示例
- 更新中英文文档
- 请求去重插件 (dedupePlugin): 新增
2.2.2
Patch Changes
-
- 修复 vue 和 react 的 hooks 状态管理异常 bug
- 允许使用的时候临时传入插件
2.2.1
Patch Changes
-
修改beforeRequest逻辑, 使其支持中断请求直接返回值
主要用途:
- 缓存请求
example:cache.test.ts
2.2.0
Minor Changes
-
Major Changes
2.1.6
Patch Changes
- 修复错误异常问题
2.1.5
Patch Changes
- 更新文档
2.1.4
Patch Changes
- 修复beforeRequest中不能抛错的问题
2.1.3
Patch Changes
- 修复stream方法的错误不会走plugin的错误生命周期的bug
2.1.2
Patch Changes
- 修复抛出的HookFetchRequest类型不支持泛型的问题
2.1.1
Patch Changes
- 8d4d6b6: 修复HookFetchRequest实例没有抛出的问题
2.1.1-beta.0
Patch Changes
- 修复HookFetchRequest实例没有抛出的问题
3.0.0-beta.0
Major Changes
- 4b15105: 修改changeset配置, 改用changeset进行发布
v2.1.0 💥
发布日期: 2025-08-08
💔 破坏性变更
- 泛型签名调整:
HookFetch与hookFetch.create的泛型从<R extends AnyObject = AnyObject, K extends keyof R = 'data', E = AnyObject>调整为<R extends AnyObject | null = null, K extends keyof R = never, E = AnyObject>。- 当
R = null(默认)时:json<T>()的返回类型为T,不做包裹映射(更贴近原生 fetch 的直觉)。 - 当你需要“包裹响应”并做键映射时:显式传入响应包裹类型和键名,例如
hookFetch.create<ResponseVO, 'data'>(...),此时json<User>()的返回类型为ResponseVO且其中data为User。
- 当
🔧 迁移指南
-
旧代码:
interface ResponseVO {
code: number;
message: string;
data: never;
}
const api = hookFetch.create<ResponseVO>({ baseURL: "..." });
const res = await api.get<User>("/user").json();
// res.data: User新代码需显式指定键名:
const api = hookFetch.create<ResponseVO, "data">({ baseURL: "..." });
const res = await api.get<User>("/user").json();
// res.data: User -
若无需包裹(直接拿到
T):const api = hookFetch.create(); // 等价于 <null, never>
const user = await api.get<User>("/user").json(); // user: User
🧰 其他
- 同步更新文档:README 与 API 参考已更新示例,明确
R | null与K的用法。
v2.0.7 🛠️
发布日期: 2025-08-08
🐛 修复
- 修复
json、text、blob、arrayBuffer、formData、bytes方法的类型推断缺失问题(更完善的返回值类型提示)。
🧱 基础设施
- 调整与修复发布 CI/CD 流程相关配置。
v2.0.6
发布日期: 2025-08-07
🔧 变更
- 发布流程与版本稳定性相关的调整。
v2.0.3 🎉
发布日期: 2025-06-30
💔 破坏性变更
- 移除默认JSON解析: 不再自动解析JSON响应,需要显式调用
.json()方法 - 更明确的响应处理: 提供更明确的响应数据处理方式,避免隐式行为
🔧 API 调整
- 所有请求方法现在需要显式调用响应处理方法(如
.json(),.text()等) - 提高了API的明确性和可预测性
📚 文档更新
- 更新了所有示例代码,明确显示
.json()调用 - 改进了响应处理的文档说明
v1.0.x
发布日期: 2025-04
🎯 首次发布
- 基于原生 fetch API 的现代化 HTTP 请求库
- 自动JSON解析: 默认自动解析JSON响应
- 完整插件系统: 支持
beforeRequest,afterResponse,beforeStream,transformStreamChunk,onError,onFinally生命周期钩子 - Vue Hooks 支持: 提供
useHookFetchVue 组合式 API - React Hooks 支持: 提供
useHookFetchReact Hook - 多种响应处理: 支持
json(),text(),blob(),arrayBuffer(),formData(),bytes()方法 - 请求重试机制: 支持
.retry()方法重试已中断的请求 - 流式数据处理: 强大的流式响应处理能力
- 请求中断: 支持
.abort()方法中断请求 - 插件优先级: 支持插件优先级设置
- SSE 支持: 提供
sseTextDecoderPlugin插件 - 完整 TypeScript 支持: 提供完善的类型定义和泛型支持
- 灵活配置: 支持超时、baseURL、请求头、参数序列化等配置选项
- VSCode 智能提示: 提供专门的类型声明文件
即将发布
- 更多内置插件
- 更丰富的插件生态
- 更多框架集成支持