跳到内容

useEventSource

类别
导出大小
1.02 kB
最后更改
5 天前

一个 EventSourceServer-Sent-Events 实例打开一个与 HTTP 服务器的持久连接,该服务器以 text/event-stream 格式发送事件。

用法

js
import { useEventSource } from '@vueuse/core'

const { status, data, error, close } = useEventSource('https://event-source-url')

查看 类型声明 以获取更多选项。

命名事件

您可以使用第二个参数定义命名事件

ts
import { useEventSource } from '@vueuse/core'

const { event, data } = useEventSource('https://event-source-url', ['notice', 'update'] as const)
js
import { useEventSource } from '@vueuse/core'
const { event, data } = useEventSource('https://event-source-url', [
  'notice',
  'update',
])

immediate

默认启用。

在调用 composable 时立即建立连接。

autoConnect

默认启用。

如果 url 作为 ref 提供,当 url 更改时,它将自动重新连接到新的 url。

错误时的自动重新连接

错误时自动重新连接(默认禁用)。

js
const { status, data, close } = useEventSource('https://event-source-url', [], {
  autoReconnect: true,
})

或通过更多控件来控制其行为

js
const { status, data, close } = useEventSource('https://event-source-url', [], {
  autoReconnect: {
    retries: 3,
    delay: 1000,
    onFailed() {
      alert('Failed to connect EventSource after 3 retries')
    },
  },
})

类型声明

显示类型声明
typescript
export type EventSourceStatus = "CONNECTING" | "OPEN" | "CLOSED"
export interface UseEventSourceOptions extends EventSourceInit {
  /**
   * Enabled auto reconnect
   *
   * @default false
   */
  autoReconnect?:
    | boolean
    | {
        /**
         * Maximum retry times.
         *
         * Or you can pass a predicate function (which returns true if you want to retry).
         *
         * @default -1
         */
        retries?: number | (() => boolean)
        /**
         * Delay for reconnect, in milliseconds
         *
         * @default 1000
         */
        delay?: number
        /**
         * On maximum retry times reached.
         */
        onFailed?: Fn
      }
  /**
   * Immediately open the connection when calling this composable
   *
   * @default true
   */
  immediate?: boolean
  /**
   * Automatically connect to the websocket when URL changes
   *
   * @default true
   */
  autoConnect?: boolean
}
export interface UseEventSourceReturn<Events extends string[], Data = any> {
  /**
   * Reference to the latest data received via the EventSource,
   * can be watched to respond to incoming messages
   */
  data: ShallowRef<Data>
  /**
   * The current state of the connection, can be only one of:
   * 'CONNECTING', 'OPEN' 'CLOSED'
   */
  status: ShallowRef<EventSourceStatus>
  /**
   * The latest named event
   */
  event: ShallowRef<Events[number] | null>
  /**
   * The current error
   */
  error: ShallowRef<Event | null>
  /**
   * Closes the EventSource connection gracefully.
   */
  close: EventSource["close"]
  /**
   * Reopen the EventSource connection.
   * If there the current one is active, will close it before opening a new one.
   */
  open: Fn
  /**
   * Reference to the current EventSource instance.
   */
  eventSource: Ref<EventSource | null>
  /**
   * The last event ID string, for server-sent events.
   * @see https://mdn.org.cn/en-US/docs/Web/API/MessageEvent/lastEventId
   */
  lastEventId: ShallowRef<string | null>
}
/**
 * Reactive wrapper for EventSource.
 *
 * @see https://vueuse.org.cn/useEventSource
 * @see https://mdn.org.cn/en-US/docs/Web/API/EventSource/EventSource EventSource
 * @param url
 * @param events
 * @param options
 */
export declare function useEventSource<Events extends string[], Data = any>(
  url: MaybeRefOrGetter<string | URL | undefined>,
  events?: Events,
  options?: UseEventSourceOptions,
): UseEventSourceReturn<Events>

源码

源码文档

贡献者

Anthony Fu
James Garbutt
Fernando Fernández
Anthony Fu
Antério Vieira
Robin
IlyaL
Tycho
陪我去看海吧
schelmo
Michael J. Roberts
丶远方
Jelf
Shinigami
江麻妞
Shinigami
Alex Kozack
Johnson Chen
Charles

更新日志

v12.8.1 于 2025/3/5
79fcb - 修复:移除 readonly 以避免破坏性更改 (#4645)
v12.8.0 于 2025/3/5
7432f - 特性(types):弃用 MaybeRefMaybeRefOrGetter,支持 Vue 的原生类型 (#4636)
v12.5.0 于 2025/1/22
eddbf - 特性:更多被动事件处理程序 (#4484)
v12.2.0-beta.1 于 2024/12/23
230f8 - 特性:新的 autoConnect 选项,与 useWebSocket 对齐 (#4204)
v12.0.0-beta.1 于 2024/11/21
0a9ed - 特性!:删除 Vue 2 支持,优化包并清理 (#4349)
v10.10.0 于 2024/5/27
29bc6 - 特性:返回 lastEventId (#3984)
v10.8.0 于 2024/2/20
b33ab - 特性:添加 autoReconnectimmediate 选项,更新类型定义 (#3793)
v10.1.1 于 2023/5/1
790bc - 特性:允许 url 参数使用可选的 string | URL 类型 (#3035)

在 MIT 许可证下发布。