Server-sent events发送请求
策略类型
use hook
在使用扩展 hooks 前,确保你已熟悉了 alova 的基本使用。
特性
- 更加 简洁易用的使用方式;
- 自动管理连接;
在[3.3.0+]
中,此策略使用fetch
实现,这意味着你可以在流式请求指定headers和method等所有fetch
支持的参数,而在之前的版本中使用EventSource
实现。
用法
import { useSSE } from 'alova/client';
const postMethodHandler = (value: string) => alova.Post('/api/source', null, {
headers: { 'Content-Type': 'application/json' },
param: { key: value }
});
const {
// 接收的数据,每次接收将会修改data
data,
// 当前的EventSource实例
eventSource,
// 连接状态,0-connecting,1-open,2-closed
readyState,
// 绑定连接事件
onOpen
// 绑定消息接收
onMessage,
// 绑定错误事件
onError,
// 绑定自定义事件
on,
// 连接并发送消息
send,
// 关闭连接
close
} = useSSE(postMethodHandler, {
credentials: 'include',
initialData: 'initial-data' // 初始时 data 中的数据
// ...fetch的其他参数
});
发送请求
默认情况下不会发送请求,你需要调用send
来发送请求,也可以设置immediate = true
立即发送请求。
const { data, eventSource, readyState, onMessage, onError, on, send, close } = useSSE(
postMethodHandler,
{
immediate: true
}
);
useSSE
目前只能连接到一个源。也就是说,当试图连接多个目标时,上一个连接总会被断开。
const { data, eventSource, readyState, onMessage, onError, on, send, close } =
useSSE(postMethodHandler);
send('value1');
send('value2'); // 这会断开上一个连接
send('value3'); // 这也会断开上一个连接
接收数据
当接收到数据时会自动将数据赋值给状态data
,你可以直接在视图上绑定它,或者监听它进行一些操作。
- vue
- react
- svelte
- solid
<template>
<div>
<span v-if="readyState === 0">连接中</span>
<span v-else-if="readyState === 1">