环信新鲜出炉的 React-UIKIT 库初体验,瞬间实现即时通讯功能!

news2024/11/17 13:24:52

一、前言

  • 为了加快即时通讯需求产品开发速度,将更多的时间放在关系核心业务逻辑的处理上,环信正式推出可扩展,易使用的 React 版本的 UIKIT 库
    此 UIKit 库 是基于 环信 Web SDK 开发的的 UI 组件库,它提供了常用的 UI 组件、包含聊天业务逻辑的模块组件以及容器组件,允许用户使用 renderX 方法进行自定义。UIKIT 库 还提供了一个 provider 来管理数据,该 provider 自动监听 chat SDK 事件以更新数据并驱动 UI 更新。开发人员可以使用此库根据实际业务需求快速构建定制的即时通讯应用程序。

二、前置技能

  • 了解 React 框架基本使用
  • 了解环信 SDK 基本功能
  • 了解 Mobox 状态管理库基本使用

三、快速开始

1、创建空白项目

  • 在自己的终端执行命令使用 vite 模版创建一个 react+typescript 项目

有同学可能会问为什么不用 react-cli 创建一个基于 webpack 的模板项目?只是单纯的觉得 vite 快相对也是比较好用,但是 webpack 搭建的项目也会遇到一个问题具体问题后面描述。

  • Vite 模版地址

终端命令

yarn create vite my-react-app --template react-ts

2、试运行空白项目

  • 终端执行yarn install初始化项目依赖
  • 终端执行yarn run dev启动项目,检查是否正常运行。
  • 上述两部没有问题则清除模版默认代码,并重新运行检查是否正常。

3、安装 UIKIT 库

终端命令

yarn add chatuim2

4、注册全局 Provider 组件

  1. App.tsx中引入Provider组件
import { Provider } from 'chatuim2';
  1. 引入 UIkit 库中的样式引入到App.tsx
import 'chatuim2/style.css';
  1. App.tsx给一个根 dom 元素作为容器并给与默认样式。
function App() {
  return <div className='app_container'></div>;
}
/* App.css */
.app_container {
  width: 100%;
}
  1. 注册Proveider组件,并传入 appKey

appKey 是在环信注册并创建应用项目生成的,具体可以参考该文档

import { Provider } from 'chatuim2';
import { APPKEY } from './config';
import './App.css';
import 'chatuim2/style.css';
function App() {
  return (
    <div className='app_container'>
      <Provider initConfig={{ appKey: APPKEY }}></Provider>
    </div>
  );
}

export default App;

5、手动建立与环信的连接。

  • 在项目目录src下创建views文件夹,并在views下新建一个main文件夹
  • main中从 UIKIT 库中引入 useClient(此为 UIKIT 中内置使用 IM 实例的 hook),并处理 IM 登录(这一步非常重要,因为之后登录成功之后,后续所有操作方可有效。)
import { useEffect } from 'react';
/* EaseIM */
import { useClient } from 'chatuim2';
const Main = () => {
  const client = useClient();
  useEffect(() => {
    client &&
      client
        .open({
          user: '环信ID号',
          pwd: '环信ID密码',
        })
        .then((res: any) => {
          console.log('get token success', res);
        });
  }, [client]);
  return <div className='main_container'></div>;
};

export default Main;

6、引入 Conversation 会话 UI 组件

  • views下新建一个conversation组件,作为会话列表组件的容器。
import { ConversationList } from 'chatuim2';
import './index.css';
const Conversation = () => {
  return (
    <div className='conversation_container'>
      <ConversationList />
    </div>
  );
};
export default Conversation;
  • main中引入并注册conversation组件。
import { useEffect } from 'react';
/* EaseIM */
import { useClient } from 'chatuim2';
/* components */
import Conversation from '../conversation';
const Main = () => {
  const client = useClient();
  useEffect(() => {
    client &&
      client
        .open({
          user: 'hfp',
          pwd: '1',
        })
        .then((res: any) => {
          console.log('get token success', res);
         });
        });
  }, [client]);
  return (
    <div className='main_container'>
      <Conversation />
    </div>
  );
};

export default Main;

  • 不要忘了main组件同样需要在 App.tsx 根组件下进行注册
import { Provider } from 'chatuim2';
import { APPKEY } from './config';
import './App.css';
import 'chatuim2/style.css';
import Main from './views/main';
function App() {
  return (
    <div className='app_container'>
      <Provider initConfig={{ appKey: APPKEY }}>
        <Main />
      </Provider>
    </div>
  );
}

export default App;

7、引入 Chat 聊天 UI 组件

  • 流程与上面会话组件的引入类型创建一个名为chatContainer组件作为Chat组件容器。
import { Chat } from 'chatuim2';
import './index.css';
const ChatContainer = () => {
  return (
    <div className='emChat_container'>
      <Chat />
    </div>
  );
};

export default ChatContainer;
  • 同样需要在main组件中引入注册
import { useEffect } from 'react';
/* EaseIM */
import { useClient } from 'chatuim2';
/* components */
import Conversation from '../conversation';
import ChatContainer from '../chatContainer';
const Main = () => {
  const client = useClient();
  useEffect(() => {
    client &&
      client
        .open({
          user: 'hfp',
          pwd: '1',
        })
        .then((res: any) => {
          console.log('get token success', res);
        });
  }, [client]);
  return (
    <div className='main_container'>
      <Conversation />
      <ChatContainer />
    </div>
  );
};

export default Main;

8、启动运行看看效果

image.png

四、遇到的问题

使用 react-cli 创建的项目,在注册Provider组件时出现截图报错。

image.png

解决方式

目前尝试的解决方式是,安装babel-loadersource-map-loader执行yarn ejest展现 webpack 相关配置,并在webpack.config.js中,babel-loader下增加sourceType: 'unambiguous',这段代码。

相关配置代码如下面示例:

  {
              test: /\.(js|mjs|jsx|ts|tsx)$/,
              include: paths.appSrc,
              loader: require.resolve('babel-loader'),
              options: {
                customize: require.resolve(
                  'babel-preset-react-app/webpack-overrides'
                ),
                sourceType: 'unambiguous',
                presets: [
                  [
                    require.resolve('babel-preset-react-app'),
                    {
                      runtime: hasJsxRuntime ? 'automatic' : 'classic',
                    },
                  ],
                ],

                plugins: [
                  isEnvDevelopment &&
                    shouldUseReactRefresh &&
                    require.resolve('react-refresh/babel'),
                ].filter(Boolean),
                // This is a feature of `babel-loader` for webpack (not Babel itself).
                // It enables caching results in ./node_modules/.cache/babel-loader/
                // directory for faster rebuilds.
                cacheDirectory: true,
                // See #6846 for context on why cacheCompression is disabled
                cacheCompression: false,
                compact: isEnvProduction,
              },
            },

相关可参考文档地址

  • UIKIT 源码地址
  • 环信 Web 端开发文档
  • 该示例源码地址

小结

该 UIKIT 组件新鲜出炉,如果有兴趣可以进行下载体验,另有一些不足之处,也虚心接受大家批评指正,如果能共享你的代码那真是再好不过,诚信邀请你提交你的 PR。

另有其他使用问题请在评论区友好交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【尚好房项目实战】:第一章项目架构介绍

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 spring版本&#xff1a;5.3.1 文章目录 前言尚好房项目实战系列文章目录一、项目介绍二、核心技术点三、项目…

次氯酸消毒剂制备中的全氟醚橡胶密封耐腐蚀电动阀门解决方案

摘要&#xff1a;次氯酸作为是一种新型消毒剂&#xff0c;近年来广泛应用于医疗卫生机构、公共卫生场所和家庭的一般物体表面、医疗器械、医疗废物等。由于次氯酸的酸性和强氧化性&#xff0c;使得次氯酸生产制备过程中会给流量调节阀门带来腐蚀并影响寿命和控制精度&#xff0…

电影票房之数据分析(Hive)--第1关

电影票房之数据分析&#xff08;Hive&#xff09; 第1关&#xff1a;统计2020年上映的电影中&#xff0c;当前总票房最高的10部电影 本关任务 基于EduCoder平台提供的初始数据集&#xff0c;统计 2020 年上映的电影中&#xff0c;当前总票房最高的 10 部电影。 编程要求 本…

论文阅读:GLOBAL PROTOTYPE ENCODING FOR INCREMENTALVIDEO HIGHLIGHTS DETECTION

摘要&#xff1a; 视频亮点检测 (VHD) 是计算机视觉中的一个活跃研究领域&#xff0c;旨在在给定原始视频输入的情况下定位最吸引用户的片段。然而&#xff0c;大多数 VHD 方法都是基于封闭世界假设&#xff0c;即预先定义固定数量的高亮类别&#xff0c;并且所有训练数据都是…

IDEA刷新太慢,非得强制reload from disk

IDEA刷新太慢&#xff0c;每次 reload from disk才能最新代码咋办。 比如我用 IDEA开发代码&#xff0c;但我用github desktop 等第三方客户端软件提交代码的&#xff0c;但是 IDEA显示还是未提交的代码。此时&#xff0c;必须强制reload from disk才跟得上磁盘改变。 安装这个…

校园能耗监测管理系统是什么?有什么作用?

随着全球气候变化和环境问题的日益严重&#xff0c;校园能耗监测管理系统成为了可持续发展的重要手段。校园能耗监测管理系统可以对校园的能源使用情况进行实时监测、统计和分析&#xff0c;进而优化能源使用&#xff0c;降低能源消耗和运营成本&#xff0c;为绿色校园建设提供…

单链表相交编程题——java实现

题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xf…

抖音账号矩阵系统源码开发功能模块分析

抖音账号矩阵系统源码是一款基于PHP语言开发的混剪工具&#xff0c;可以方便地将多个抖音账号的视频素材进行混剪&#xff0c;生成一个新的视频。该工具使用了多线程、协程和异步编程等技术&#xff0c;可以显著提高处理速度&#xff0c;并且支持自动去重和自动合成背景音乐等功…

报名开源之夏,与 StarRocks 一起畅游代码的海洋!

开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;培养和发掘更多优秀的开发者&#xff0c;促进优秀开源软件社区的蓬勃发展&#xff0c;助力开源软件供应链建设。 202…

YOLOV5使用(一)

yolov5的工程使用(以人员检测为案例) 使用ubuntu为案例 docker run --gpus all -it -p 6007:6006 -p 8889:8888 --name my_torch -v $(pwd):/app easonbob/my_torch1-pytorch:22.03-py3-yolov5-6.0使用端口映射功能也就是说打开jupyter lab的指令是 http://localhost:8889/l…

flutter系列之:做一个下载按钮的动画

文章目录 简介定义下载的状态定义DownloadButton的属性让DownloadButton的属性可以动态变化定义downloadController定义DownloadButton的细节总结 简介 我们在app的开发过程中经常会用到一些表示进度类的动画效果&#xff0c;比如一个下载按钮&#xff0c;我们希望按钮能够动态…

AI歌手:新晋挑战者还是未来主流的替代者?

AI歌手&#xff1a;新晋挑战者还是未来主流的替代者&#xff1f; 近日&#xff0c;一款名为“AI孙燕姿”的AI歌手火遍全网&#xff0c;其翻唱的林俊杰的《她说》、周杰伦的《爱在西元前》、赵雷的《成都》等歌曲让网友纷纷表示&#xff1a;“听了一晚上&#xff0c;出不去了。…

《信息技术时代》期刊简介及投稿要求

《信息技术时代》&#xff08;半月刊&#xff09;本刊是由国家新闻总署批准&#xff0c;深圳湾科技发展有限公司主管主办的信息类期刊&#xff0c;国内统一刊号CN&#xff1a;44-1536/TN&#xff0c;国际标准刊号ISSN&#xff1a;1671-153x。本刊旨在为全集团的信息工作者提供交…

Hadoop部署完全分布式

​ 在真实的企业环境中&#xff0c;服务器集群会使用到多台机器&#xff0c;共同配合&#xff0c;来构建一个完整的分布式文件系统。而在这样的分布式文件系统中&#xff0c;HDFS相关的守护进程也会分布在不同的机器上&#xff0c;例如: NameNode守护进程&#xff0c;尽可能的…

【OpenCv • c++】几何检测 —— 霍夫变换 | 霍夫直线检测 | 霍夫线变化

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

浅谈YUV444、YUV422、YUV420

本期将会给大家介绍YUV相关基础知识&#xff0c;同时也介绍威创网络分布式系统的卓越色彩处理技术。 1.什么是YUV色彩空间 2.YUV采样格式 3.YUV不同采样格式对图像画质的影响分析 一、什么是YUV色彩空间? YUV是视频、图片、相机等应用中常常使用的一类图像格式&#xff0c;是…

【python案例】获取IP代理数据,筛选出符合需求的IP

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们为什么要IP代理呢&#xff1f; 当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站> IP代理换一个IP, 再去采集请求数据 开发环境: 解释器版本: python 3.8 代码编辑…

Vicuna:斯坦福开源一个性能相当于90%ChatGPT的聊天机器人

自从Meta公司发布LLaMA以来&#xff0c;围绕它微调和开发的模型越来越多&#xff0c;这得益于它的性能和效果&#xff0c;2023年3月份发布的草泥马&#xff08;Alpaca&#xff09;是由Meta的LLaMA 7B微调而来的全新模型&#xff0c;仅用了52k数据&#xff0c;性能约等于GPT-3.5…

欧奈尔杯柄形态选股公式,突破杯柄高点发出信号

杯柄形态是由美国著名的成长股投资大师威廉欧奈尔提出的&#xff0c;在其经典著作《笑傲股市》中有详细介绍。 根据欧奈尔在书中的描述&#xff1a; 从侧面观察其轮廓时&#xff0c;最重要的价格形态之一看起来就像是一个带柄的茶杯。杯状形态可以持续7~56周不等&#xff0c;但…

数据结构选择题(难题题解) 第五章 树

5.2 14. 法1&#xff1a;少一个叶子再多一个叶子&#xff0c;欠考虑了 选B 法2&#xff1a; 法三&#xff1a; 5.3 23.选D A. 如果是根 直接找孩子就能找到后继&#xff1b;如果是左孩子&#xff0c;有孩子就找孩子&#xff0c;无孩子&#xff0c;指针是空&#xff0c…