一个WebSocket的自定义hook

一个WebSocket的自定义hook

自己封装了一个WebSocket的hook,代码如下:

typescript 复制代码
import { useEffect, useContext } from "react";
import { AppContext } from "../../App";
import useSocketHandle from "./useSocketHandle";

const WS_URL = 'wss://xxx' // 服务地址

const useSocket = () => {

    const socketRef = useRef<WebSocket>()

    let heartTimer = 0; // 心跳定时器 ID

    const heartCheck = (socket: WebSocket) => { // 心跳检查
        clearInterval(heartTimer); // 先清除之前的定时器

        heartTimer = setInterval(() => {
            socket.send('xxx'); // 约定好的心跳
        }, 30000);
    }

    const createSocket = () => { // socket创建

        if (socketRef.current) return;

        const socket = new WebSocket(`${WS_URL}`) // 信令服务器连接
        socket.onopen = () => { // 连接建立
            console.log("[ws open] 连接已建立");
            heartCheck(socket);// 心跳处理
        };

        socket.onmessage = async (event) => { // 接收到服务器的信息
          console.log(event)
        };

        socket.onclose = () => { // 连接关闭
            console.log('[ws close] 连接中断');
            socketRef.current = undefined
            clearInterval(heartTimer); // 清除定时器
        };

        socket.onerror = (error) => { // 连接错误
            console.log(`[error] 连接错误 `, error);
        };

        return socket;
    }

    useEffect(() => { // 监听房间
        socketRef.current = createSocket();
        // 关闭socket的方法
      	// socketRef.current.close();
    }, [])

    return socketRef; // 如果不需要的话不返回也是可以的
}

export default useSocket

使用方法如下:

typescript 复制代码
const socketRef = useSocket()
相关推荐
javaの历练之路2 小时前
基于 SpringBoot+Vue2 的前后端分离博客管理系统(含 WebSocket+ECharts)
spring boot·websocket·echarts
还是大剑师兰特3 小时前
React面试题及详细答案150道(51-60)
react.js·react面试题·大剑师
10share4 小时前
React组件间通信
react.js
是一碗螺丝粉5 小时前
React Native 运行时深度解析
前端·react native·react.js
骑自行车的码农5 小时前
🍂 React DOM树的构建原理和算法
javascript·算法·react.js
前端老宋Running1 天前
一次从“卡顿地狱”到“丝般顺滑”的 React 搜索优化实战
前端·react.js·掘金日报
4***14901 天前
TypeScript在React中的前端框架
react.js·typescript·前端框架
y***54881 天前
TypeScript在React项目中的状态管理
javascript·react.js·typescript
努力往上爬de蜗牛1 天前
react native真机调试
javascript·react native·react.js
小猪努力学前端2 天前
在 React + React Router v7 SSR 项目里做多端适配,我踩的两个坑
前端·react.js