首页 > 其他分享 >客服react

客服react

时间:2023-07-10 19:33:41浏览次数:48  
标签:current readyState const 客服 console react ws useState

// import { useEffect, useState } from "react";

// export default function ceshi() {
//   const [value,setValue] = useState(2);
//   const [data,setData] = useState('');
//   const ws = new WebSocket('ws://124.222.224.186:8800');
// useEffect(()=>{

//   ws.onopen = () => {
//     console.log('服务器已连接');
//   };
//   ws.onmessage = (msg) => {
//     setData(msg.data)
//     // alert( msg.data)
//     console.log('来自服务器端的数据:' + msg.data); //监听接受来自服务端的信息
//   };
//   ws.onclose = () => {
//     console.log('服务器关闭');
//   };
// },[value])
//   const sendserver=()=> {
//     ws.send('65555555555555555555'); //向服务端发送信息
//     setValue(3);
//   }
//   return <div>
//     <div dangerouslySetInnerHTML={{__html:data}}></div>
//     <button onClick={sendserver}>发送</button>
//   </div>;
// }
import React, { useState, useRef, useLayoutEffect, useCallback } from 'react';
// import Header from './components/header';
// import './App.less';

const App = () => {
  const ws = useRef<WebSocket | null>(null);
  const [message, setMessage] = useState('');
  const [readyState, setReadyState] = useState('正在链接中');
  const [rdNum, SetRdNum] = useState<number>(0);

  /**
   * 伪随机函数,测试用
   *  */
  const getRandomInt = useCallback(() => {
    SetRdNum(Math.floor(Math.random() * Math.floor(999)));
  }, []);

  const webSocketInit = useCallback(() => {
    const stateArr = [
      '正在链接中',
      '已经链接并且可以通讯',
      '连接正在关闭',
      '连接已关闭或者没有链接成功',
    ];
    if (!ws.current || ws.current.readyState === 3) {
      ws.current = new WebSocket('ws://localhost:7070');
      ws.current.onopen = _e =>
        setReadyState(stateArr[ws.current?.readyState ?? 0]);
      ws.current.onclose = _e =>
        setReadyState(stateArr[ws.current?.readyState ?? 0]);
      ws.current.onerror = e =>
        setReadyState(stateArr[ws.current?.readyState ?? 0]);
      ws.current.onmessage = e => {
        setMessage(e.data);
      };
    }
  }, [ws]);

  /**
   * 初始化 WebSocket
   * 且使用 WebSocket 原声方法获取信息
   *  */
  useLayoutEffect(() => {
    getRandomInt();
    webSocketInit();
    return () => {
      ws.current?.close();
    };
  }, [ws, getRandomInt, webSocketInit]);

  console.log('ws.readyState', ws.current?.readyState);

  return (
    <div className='App'>
      {/* <Header status={readyState} /> */}
      <div className='container'>
        <div>{message}</div>
        {/* <div>{readyState}</div> */}
        <div
          onClick={() => {
            ws.current?.close();
          }}>
          Clone
        </div>
        <div
          onClick={() => {
            getRandomInt();
            webSocketInit();
          }}>
          start
        </div>
        <div
          onClick={() => {
            if (ws.current?.readyState !== 1) {
              console.log('尚未链接成功');
              setMessage('正在链接');
              return;
            }
            ws.current?.send(rdNum.toString());
          }}>
          ID:{rdNum}
        </div>
      </div>
    </div>
  );
};

export default App;

  

标签:current,readyState,const,客服,console,react,ws,useState
From: https://www.cnblogs.com/zjxzhj/p/17542094.html

相关文章

  • 《ReAct: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS》论文学习
    一、论文主要思想本文首先认为,到目前为止,LLM在语言理解方面令人印象深刻,它们已被用来生成CoT(思想链)来解决一些问题,它们也被用于执行和计划生成。尽管这两者是分开研究的,但本文旨在以交错的方式将推理和行动结合起来,以提高LLM的表现。这个想法背后的原因是,如果你考虑一下作为......
  • electron 和 react 进程通信
    现在有个需求,我想要使用react选择上传文件,获取文件路径在浏览器里面调用antdesign的upload组件是做不到的,只能获取文件名由于浏览器的安全限制,无法获取文件的完整路径。如果需要获取文件的完整路径,可以考虑使用Electron等桌面应用程序开发框架,或者使用ActiveX控件等......
  • React18+TS+NestJS+GraphQL 全栈开发在线教育平台
    第1章这里,将带你进行一次全面,高效的进阶试看3节‖36分钟学习本课程你能得到什么?不论是技术提升,职场晋升,面试跳槽,你都会有所收获。第2章了解用户需求,懂得如何做项目试看4节‖54分钟本章让大家了解一个企业级项目的用户需求是什么,有哪几种角色,是如何使用我们的产品的,知道......
  • reactive函数
    作用:定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)语法:const代理对象=reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)reactive定义的响应式数据是“深层次的”。内部基于ES6的Proxy实现,通过代理对象操作源对象......
  • 【Reactor模型】事件驱动模型 - Reactor模型简述
    Reactor模式Reactor模式是非阻塞同步网络模式,主要由Reactor和处理资源池这两个核心部分组成,负责:Reactor负责监听和分发事件,事件类型包含连接事件,读写事件;处理资源池负责处理事件,如read->处理逻辑->sendReactor模式是灵活多变的,可以应对不同的业务场景,灵活在于:Reactor的数......
  • 用 AIGC 重构后的智能客服,能否淘到大模型时代的第一桶金?
    ChatGPT的诞生打响了现代AI军备竞赛的第一枪。以GPT-4、ChatGTP、Bard等为代表的大语言模型在全球各界引起了广泛关注。结合ChatGPT的底层技术逻辑,未来中短期内ChatGPT产业化的方向大致有四类:即智能客服、文字模态的AIGC应用、代码开发相关工作以及图像生成。其中,最适......
  • 一篇读懂React、vue框架的生命周期函数
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址当涉及到前端框架时,React和Vue.js是两个非常受欢迎的选择。它们都提供了强大的工具和功能,帮助开发者构建交互式的、可扩展的应用程序。在这两个框架中,生命周期函数是一个重要的概念,它们允许我们在组件的不同阶段执行特......
  • 【开源分享】在线客服系统源码,支持发送文本表情,上传图片附件附详细搭建教程
    源码介绍golang开发的单用户在线客服系统,功能非常的简洁实用,没有多余的功能。golang语言可编译为二进制程序,自带守护进程功能,相比于流传最广的PHP客服系统要稳定环境配置服务器:linux或者windows都可以golang运行环境MySQLNginx配置Golang环境Windows系统首先下载golang......
  • 微信小程序taro-react-echarts使用dataZoom问题
    taro微信小程序中使用taro-react-echarts展示图表数据,因为数据量大,需要使用dataZoom来左右滑动图表。实现效果解决首先在echarts的options中添加xAxis:...yAxis:...dataZoom:[{type:'inside',start:0,end:data.time?.length>20?(20/data.time......
  • Vue3主要的响应类方法(ref、reactive、toRef、toRefs)
    1.Vue.ref()1.1.可以为单个属性添加响应式状态。1.2.可以为对象添加响应式状态,当给对象的某个属性单独ref后,改变后的属性值不会同时改变原始值。1.3.访问数据值,需要添加.value。1.4.原始数据的拷贝。(原始数据不被改变)2.Vue.reactive()2.1.给对象添加响应式状态2.2.访问数据值......