当前位置:首页 > React

react websocket 实现

2026-01-26 11:46:45React

使用 React 实现 WebSocket 连接

在 React 中实现 WebSocket 连接可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种方法的详细实现方式。

原生 WebSocket API 实现

原生 WebSocket API 是浏览器内置的功能,无需额外安装库。

import React, { useState, useEffect } from 'react';

const WebSocketComponent = () => {
  const [messages, setMessages] = useState([]);
  const [input, setInput] = useState('');
  const [socket, setSocket] = useState(null);

  useEffect(() => {
    // 创建 WebSocket 连接
    const ws = new WebSocket('ws://your-websocket-server-url');

    ws.onopen = () => {
      console.log('WebSocket 连接已建立');
      setSocket(ws);
    };

    ws.onmessage = (event) => {
      const newMessage = event.data;
      setMessages((prev) => [...prev, newMessage]);
    };

    ws.onclose = () => {
      console.log('WebSocket 连接已关闭');
    };

    ws.onerror = (error) => {
      console.error('WebSocket 错误:', error);
    };

    // 清理函数,组件卸载时关闭连接
    return () => {
      if (ws.readyState === WebSocket.OPEN) {
        ws.close();
      }
    };
  }, []);

  const sendMessage = () => {
    if (socket && input) {
      socket.send(input);
      setInput('');
    }
  };

  return (
    <div>
      <h3>消息列表</h3>
      <ul>
        {messages.map((msg, index) => (
          <li key={index}>{msg}</li>
        ))}
      </ul>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
      />
      <button onClick={sendMessage}>发送</button>
    </div>
  );
};

export default WebSocketComponent;

使用 socket.io-client 实现

socket.io-client 是一个流行的 WebSocket 库,支持更多功能(如自动重连、事件命名等)。

安装依赖:

npm install socket.io-client

实现代码:

react websocket 实现

import React, { useState, useEffect } from 'react';
import { io } from 'socket.io-client';

const SocketIOComponent = () => {
  const [messages, setMessages] = useState([]);
  const [input, setInput] = useState('');
  const [socket, setSocket] = useState(null);

  useEffect(() => {
    // 创建 Socket.io 连接
    const newSocket = io('http://your-socketio-server-url');

    newSocket.on('connect', () => {
      console.log('Socket.io 连接已建立');
      setSocket(newSocket);
    });

    newSocket.on('chat message', (msg) => {
      setMessages((prev) => [...prev, msg]);
    });

    newSocket.on('disconnect', () => {
      console.log('Socket.io 连接已关闭');
    });

    // 清理函数
    return () => {
      newSocket.disconnect();
    };
  }, []);

  const sendMessage = () => {
    if (socket && input) {
      socket.emit('chat message', input);
      setInput('');
    }
  };

  return (
    <div>
      <h3>消息列表</h3>
      <ul>
        {messages.map((msg, index) => (
          <li key={index}>{msg}</li>
        ))}
      </ul>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
      />
      <button onClick={sendMessage}>发送</button>
    </div>
  );
};

export default SocketIOComponent;

关键注意事项

  • 连接管理:确保在组件卸载时关闭 WebSocket 连接,避免内存泄漏。
  • 错误处理:监听 onerror 事件以处理连接异常。
  • 重连逻辑:原生 WebSocket 需手动实现重连,而 socket.io-client 内置自动重连功能。
  • 服务端兼容性:确保服务端协议与客户端匹配(如原生 WebSocket 或 Socket.io)。

以上两种方法均可实现实时通信,选择取决于项目需求和服务端支持情况。

标签: reactwebsocket
分享给朋友:

相关文章

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…

如何恢复react

如何恢复react

恢复 React 项目的方法 检查并修复依赖项 运行 npm install 或 yarn install 重新安装所有依赖项。如果依赖项损坏或缺失,这将恢复项目所需的库和工具。 恢复删除的文件 如…

react 如何获取dom

react 如何获取dom

获取 DOM 的方法 在 React 中,可以通过 useRef 或 createRef 来获取 DOM 节点。useRef 是函数组件中常用的方法,而 createRef 通常用于类组件。 使用…

react如何同步修改

react如何同步修改

同步修改状态的常见方法 在React中同步修改状态通常涉及使用useState或useReducer钩子,结合React的批处理机制确保状态更新的一致性。以下是几种典型场景的解决方案: 直接使用us…