在react中使用socket.io

客户端初始化

ts 复制代码
// src/utils/socket.ts
import { io } from 'socket.io-client';

export const socket = io('ws://localhost:3001', {
  autoConnect: false,
  // transports: ['websocket'],
  auth: (cb: (token: object) => void) => {
    cb({ token: localStorage.getItem('token') });
  },
});

参数介绍

  1. autoConnect默认为true。客户端立即打开与服务器的连接。设置false后,需要手动维护ws连接。
  2. auth 携带鉴权信息。服务端获取方式:client.handshake?.auth?.token

演示代码

ts 复制代码
  useEffect(() => {
    const onConnect = () => {
      console.log('connected');
      socket.volatile.emit('joinRoom', {
        chatroomId: chatroomId,
      });
    };

    const onConnectError = (err: any) => {
      console.log('error', err);
    };

    const onDisconnect = (reason: Socket.DisconnectReason) => {
      console.log('disconnect', reason);
    };

    socket.on('connect', onConnect);
    socket.on('connect_error', onConnectError);
    socket.on('disconnect', onDisconnect);
    socket.connect();
    return () => {
      socket.off('connect', onConnect);
      socket.off('connect_error', onConnectError);
      socket.off('disconnect', onDisconnect);
      socket.disconnect();
    };
  }, [chatroomId]);

参考

  1. How to use with React
相关推荐
炫饭第一名几秒前
速通Canvas指北🦮——路径与形状篇
前端·javascript·程序员
DeathGhost30 分钟前
CSS container容器查询
前端·css
JarvanMo30 分钟前
Flutter:展示大段格式化文本的挑战
前端
兆子龙35 分钟前
Node.js ESM Loader Hooks 介绍:用 module.register 做转译、Import Map 与自定义解析
前端
四眼肥鱼37 分钟前
flutter 利用flutter_libserialport 实现SQ800 串口通信
前端·flutter
ZFSS37 分钟前
OpenAI Images Edits API 申请及使用
前端·人工智能
Lee川1 小时前
从零构建AI对话应用:Vite脚手架搭建与API密钥安全实践
前端·程序员
允许部分打工人先富起来1 小时前
在node项目中执行python脚本
前端·python·node.js
钟智强1 小时前
Flutter引擎Android平台JNI层未验证指针转换漏洞
前端
骑着小黑马1 小时前
Electron + Vue3 + AI 做了一个新闻生成器:从 0 到 1 的完整实战记录
前端·人工智能