@triggery/socket
Направляй события socket.io или сообщения нативного WebSocket в события Triggery. Два хука одной формы, оба безопасны для StrictMode — подключение и отключение через useEffect.
Установка
Заголовок раздела «Установка»pnpm add @triggery/core @triggery/react @triggery/socket npm install @triggery/core @triggery/react @triggery/socket yarn add @triggery/core @triggery/react @triggery/socket bun add @triggery/core @triggery/react @triggery/socket Peer-зависимости: react >= 18.0.0. Нативный конструктор WebSocket используется напрямую, когда нужно, — никаких дополнительных зависимостей.
Что внутри
Заголовок раздела «Что внутри»| Экспорт | Назначение |
|---|---|
useSocketIoEvent(trigger, eventName, socket, socketEventName, options?) | Пробрасывает событие socket.io-client в событие триггера. Поддерживает variadic-аргументы. |
useWebSocketEvent(trigger, eventName, ws, wsEvent, options?) | Пробрасывает событие нативного WebSocket ('message', 'open', 'close', 'error', кастомное). |
Быстрый пример
Заголовок раздела «Быстрый пример»socket.io
Заголовок раздела «socket.io»import { io } from 'socket.io-client';
import { useSocketIoEvent } from '@triggery/socket';
const socket = io('https://example.com');
function MessageBridge() {
useSocketIoEvent(messageTrigger, 'new-message', socket, 'message');
return null;
}С variadic-аргументами:
useSocketIoEvent(messageTrigger, 'new-message', socket, 'msg', {
mapPayload: (from, text) => ({ from, text }),
});Нативный WebSocket
Заголовок раздела «Нативный WebSocket»import { useWebSocketEvent } from '@triggery/socket';
const ws = new WebSocket('wss://example.com');
function MessageBridge() {
useWebSocketEvent(messageTrigger, 'new-message', ws, 'message', {
mapPayload: (e) => JSON.parse((e as MessageEvent).data),
});
return null;
}wsEvent принимает любую строку — типизирован как 'message' | 'open' | 'close' | 'error', но расширяем.
Как это работает
Заголовок раздела «Как это работает»Оба хука подключаются в useEffect (commit-фаза, безопасно для StrictMode) и отключаются при unmount или изменении входных параметров. Если socket / ws равны null или undefined, хук — no-op, пока ты не передашь соединение; удобно, когда сокет создаётся асинхронно.
Связанные пакеты
Заголовок раздела «Связанные пакеты» @triggery/core Экспортирует Trigger.
@triggery/react Это React-хуки.
@triggery/dom Альтернативный источник событий: DOM-события, ResizeObserver, IntersectionObserver.
@triggery/query Сочетай события сокета с чтением кеша TanStack Query.