Skip to content

useSend & XRequest

使用import { useSend } from 'vue-element-plus-x'
文档
编辑此页更新日志Issue 反馈

XRequest已废弃,推荐使用 hook-fetch(https://jsonlee12138.github.io/hook-fetch/) ​

背景介绍 ​

基于 ant-design-x 的 XRequest,XStream,我们进行了深入的学习和讨论。

在复刻 XStream 后,针对更通用的 控制请求数据 和 中断请求 的场景,我们将 ant-design-x 的 XRequest 进行了重构,将其拆分成 前端终止场景 和 请求终止场景

两种场景 分别对应

  • hooks useSend -- 前端终止场景
  • 工具类 XRequest -- 请求终止场景

🍒 两者可以单独拆开使用,组合使用可实现 useXStream,下面是他们的使用示例

代码演示 ​

只需要传一个 开始方法 ,即可获得 对应的 loading 状态,以及 对应的 finish 方法。

单个控制,代码不超过 10 行

这个案例可以很好看出,这个 hooks 不与后端请求做交互,只是控制简单的 loading 状态。

send 方法 触发 sendHandler 回调 finish 方法 结束 loading 状态

有了对状态的控制,我们可以很方便的,自定义一些按钮的加载状态

sendHandler 和 abortHandler 是两个函数,分别对应 开始 和 中断 的回调。

abort 方法 触发 abortHandler 回调

abort 方法 同时也会 结束 loading 状态

知道了 useSend 的基本用法后,既然有 前端加载状态 的控制,那一定少不了 请求状态 控制。接下来我们来介绍一下 工具类 XRequest 的简单用法。

这样你就简单的使用 XRequest 控制了 请求的发起 和 中断请求中的状态。 简单的 new XRequest(),实例化对象,然后 .send() 开始请求, .abort() 停止请求。

我们可以在 控制台 查看到,流式请求 请求被终止。

📌 Warning

这里我们为了让大家方便阅读文档,看到请求,简单的写了一个 node 服务。这个案例中,💩 请不要疯狂点击。会疯狂请求接口,请大家节制一点。💩 我们没做任何安全处理 🙉 因为不会

这也可以反向让大家知道更了解,工具类 XRequest 的用法,只对 请求 处理。

在 new XRequest() 中传入对应的配置项

transformer 可以对内应的响应数据进行转换处理,还提供了很多配置的 回调方法,供开发者使用。

大家也可在 控制台 查看 回调方法的打印

下面介绍一下,useSend 和 useSendStream 相互结合的用法

使用 useSend 对前端进行状态控制,使用 useSendStream 对后端进行状态控制

配置参数 和 返回钩子 ​

- useSend ​

  • 参数
参数名说明类型
sendHandlersend 方法() => void
abortHandlerabort 方法() => void
  • 返回值
属性名说明类型
send开始 加载状态 支持回调() => void
abort中断 加载状态 支持回调() => void
loading加载状态boolean
finish结束 加载状态() => void

- XRequest ​

  • 参数
配置参数名说明类型
baseURL基础请求地址string
type请求类型,默认 SSEBaseSSEProps<T = string>.type?: SSEType | undefined
transformertransformer 回调,在这里可以对数据做解析处理(e: string) => string | undefined
onMessage请求中的回调(msg: string | undefined) => void
onError请求报错的回调(es: EventSource, e: Event) => void
onOpenSSE Open 状态SSEWithSSEProps.onOpen?: (() => void) | undefined
onAbort请求被终止的回调(messages: (string | undefined)[]) => void
onFinish请求结束的回调(data: (string | undefined)[]) => void
  • 返回值
属性名说明类型
send开始请求接口XRequest<string | undefined>.send(url: string, options?: EventSourceInit | BaseFetchOptions): Promise<XRequest<string | undefined>>
abort中断请求XRequest<string | undefined>.abort(): void

总结 ​

useSend 可以让用户更方便在前端展示和控制, 加载中 状态。是一种对 loading 状态的封装方案 接受 发送回调 和一个中断回调 ,提供 发送 ,中断 loading 状态 ,结束 loading 状态 ,返回 loading 状态。

XRequest 是一个请求的封装,提供了更便捷的请求方式,接受一个 请求配置 ,返回一个 请求响应 对象。