react中使用 websocket

这篇具有很好参考价值的文章主要介绍了react中使用 websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下方是我微信公众号的二维码,关于react及其他相关知识点会在公众号上面更新,可以扫码关注以下,有什么问题也可以通过公众号跟我留言哦

react中使用 websocket,react.js,websocket,前端

react中使用 websocket,使用socket.io库
参考官网地址: https://socket.io/zh-CN/docs/v4/client-installation/#from-npm

1.安装

npm install socket.io-client

2.示例代码

import React, { useEffect, useRef, useState } from "react";
import classNames from "classnames";
import { formatDate } from "../../utils/format";
import "./index.css";

// https://socket.io/zh-CN/docs/v4/client-installation/#from-npm
import { io } from "socket.io-client";
const socket = io("ws://localhost:8888"); // 连接,握手

function Chat() {
  // 用户列表
  const [usersList, setUsersList] = useState([]);
  // 历史记录
  const [historyData, setHistoryData] = useState([]);
  // 当前用户是否是自己
  const [mine, setMine] = useState("");
  // 要发送的消息
  const [message, setMessage] = useState("");

  useEffect(() => {
    // 当前聊天室的用户数组 -- 有新用户进入/老用户退出/自己进入
    socket.on("$updateUser", (users) => {
      console.log(users, "users");
      setUsersList(users);
    });
    // 分配的用户名称 -- 自己进入
    socket.on("$name", (name) => {
      console.log(name, "name");
      setMine(name);
    });
    // 历史聊天记录  -- 自己进入
    socket.on("$history", (history) => {
      console.log(history, "history");
      setHistoryData(history);
    });
    // 其他人发送消息
    socket.on("$message", (message) => {
      console.log(message, 123);
      setHistoryData([...historyData, message]);
    });
    return () => {
      socket.off("$updateUser");
      socket.off("$name");
      socket.off("$history");
      socket.off("$message");
    };
  }, [historyData]);

  const chatAreaRef = useRef();
  //  当聊天区高度超出后,设置滚动条在最下面
  useEffect(() => {
    chatAreaRef.current.scrollTop = chatAreaRef.current.scrollHeight;
  }, [historyData]);

  //   发送消息
  const handleKeyDown = (e) => {
    if (e.key === "Enter") {
      e.preventDefault(); // 阻止默认的换行行为
      const content = message.trim();
      if (!content) return;
      const messageInfo = {
        name: mine,
        content: content,
        data: Date.now(),
      };
      setHistoryData([...historyData, messageInfo]); // 将消息添加到历史记录里面
      socket.emit("$message", message); // 将消息发送到服务器
      setMessage(""); // 清空textarea
    }
  };

  return (
    <section className="chat-container">
      <aside className="chat-users">
        <div className="title">聊天室成员</div>
        {usersList.length > 0 &&
          usersList.map((item, index) => (
            <div key={index} className="per-user">
              {item}
            </div>
          ))}
      </aside>
      <section className="chat-main">
        <div className="chat-user">{mine}</div>
        <div className="chat-area" ref={chatAreaRef}>
          {historyData.length > 0 &&
            historyData.map((item, index) => (
              <div
                key={index}
                className={classNames("chat-item", {
                  mine: mine === item.name,
                })}
              >
                <div className="name">{item.name}</div>
                <div className="content">{item.content}</div>
                <div className="date">{formatDate(item.date)}</div>
              </div>
            ))}
        </div>
        <div className="chat-message">
          <textarea
            name="message"
            value={message}
            onChange={(e) => {
              setMessage(e.target.value);
            }}
            onKeyDown={handleKeyDown}
          ></textarea>
        </div>
      </section>
    </section>
  );
}

export default Chat;

3.效果:
react中使用 websocket,react.js,websocket,前端文章来源地址https://www.toymoban.com/news/detail-526591.html

到了这里,关于react中使用 websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React.js前端 + Spring Boot后端员工管理

    该项目是一个员工管理系统,前端使用 React.js 构建,后端使用 Spring Boot 和 Data JPA 和 Lombok 构建。它提供了有效管理员工信息的全面解决方案。 特征 响应式设计:响应式 UI 设计,确保跨各种设备的可用性。 数据验证:验证用户输入以确保数据完整性。 使用的技术 前端:R

    2024年04月28日
    浏览(50)
  • react中使用 websocket

    下方是我微信公众号的二维码,关于react及其他相关知识点会在公众号上面更新,可以扫码关注以下,有什么问题也可以通过公众号跟我留言哦 react中使用 websocket,使用socket.io库 参考官网地址: https://socket.io/zh-CN/docs/v4/client-installation/#from-npm 1.安装 2.示例代码 3.效果:

    2024年02月12日
    浏览(34)
  • 前端js react vue怎么实现在线预览doc文档

    先说结论: 目前在纯前端层面没有很好的方案,基本都需要服务端的介入。 优点 :简单易用,无需配置 缺点 :文档需要支持外网访问,且文档会是公开可见的,所以对于一些内部敏感的文档来说,这个显然是不可行的。 需要后端介入配合 onlyoffice地址 这个也要先在服务器

    2024年02月15日
    浏览(85)
  • 前端刷新页面的五种方法(含原生js、vue和react)

    1、window.history.go(0)方法 2、location.reload()方法 3、location.href=location.href方法 4、vue-router方法 5、react-router方法

    2024年02月16日
    浏览(51)
  • SpringBoot WebSocket配合react 使用消息通信

    引入websocket依赖 配置websocket websocket核心代码 react 前端部分代码

    2024年02月13日
    浏览(45)
  • 使用React 18和WebSocket构建实时通信功能

    WebSocket 是一种在 Web 应用中实现双向通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求。在现代的实时应用中, WebSocket 经常用于实时数据传输、聊天功能、实时通知和多人协作等场景。在本篇博客中,我们将探索如何在 React 18 应用中使用 WebSocke

    2024年02月05日
    浏览(41)
  • 【WebSocket】前端使用WebSocket实时通信

    最近写项目,需要实现消息通知和实时聊天的功能,就去了解了一些关于websocket的知识,总结如下。 WebSocket 是一种在 Web 应用中实现实时通信的协议。与传统的 HTTP 请求不同,WebSocket 连接在客户端和服务器之间建立一个 持久性 的 双向通信管道 ,使得数据可以在连接打开后

    2024年02月11日
    浏览(34)
  • 【前端】html2canvas生成图片空白排查data:;(js vue react uniapp)

    因为要做一个分享图,就用到了html2canvas,一开始是好好的,今天随便测了下,发现图片显示不出来了。打印了下,生成的图片链接变成了 data:; 。后面一步一步地排查,发现是页面内容太多了,删减一点内容就能显示出来。然后我又去认真看了下html2canvas的各个参数,发现可

    2024年02月03日
    浏览(59)
  • 【前端系列】前端如何使用websocket发送消息

    今天来学习一下前端如何使用websocket发送消息 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它可以让客户端和服务器之间进行实时的双向通信。与传统的 HTTP 请求不同,WebSocket 使用了一个长连接,在客户端和服务器之间保持持久的连接,从而可以实时地发送和接

    2024年02月11日
    浏览(47)
  • js中使用websocket

     后端地址是http的   websocket地址 ws开头;后端地址是https的,websocket地址wss开头; 对于websocket没有跨域的问题 注意:系统退出后需要关闭websocket,尤其是平台需要单账号登陆的。

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包