构建交互式聊天界面:react-chat-element 实战小计
react聊天组件库:react-chat-elements
需求场景:用户可以通过多元的用户交互方式,如文件、图片、声音以及文字等输入相关信息,AI给出对应的回答

react-chat-element介绍
react-chat-elements 是一个专为React开发者设计的聊天组件库,旨在简化聊天界面的开发过程,适用于构建社交应用、客户支持系统、企业内部沟通工具等多种应用场景。
技术特点
- 基于React框架,充分利用了React的组件化开发优势。
 - 组件高度可定制,能够满足不同场景下的需求。
 - 支持文本、图片、文件、位置、视频、音频等多种消息类型。
 - 响应式设计,确保在移动端和桌面端都能良好显示
 
安装
npm install react-chat-elements --save
yarn add react-chat-elements
常用组件
MessageBox
MessageBox 组件涵盖了文本、图片、地理位置等多种类型的消息展示
import { MessageBox } from "react-chat-elements";
<MessageBox
  position='left'
  title='Burhan'
  type='text'
  text="Hi there !"
  date={new Date()}
  replyButton={true}
/>

MessageBox Props
以下列举出了该项目实现过程中所用到的一些组件配置:
| props | default | type | description | 
|---|---|---|---|
| position | none ("left" | "right") | string | 消息的位置,左侧还是右侧 | 
| type | none ("text" | "photo" | "file" | "audio" | ... ) | 
 string  | 
消息的类型,更多参考messagetype-list | 
| text | none | 
 React Node | string  | 
消息的内容,不局限于string,也可以是一个自定义组件,提供了丰富的扩展空间 | 
| 
 avatar 
 | 
none | string | 消息的头像,一般为一个图片的在线链接 | 
| data | none | 
 object  | 
当消息类型为非text(file, photo...)时的详细信息,例如:文件的名称、扩展、大小、uri链接状态等 | 
| className | none | 
 string  | 
自定义类名 | 
Text Message
最基础的文本消息组件,但是可以通过定义text丰富消息的展示形式,例如本次需求中的文本包含 CSS动画效果以及简单的交互(确认与取消)
import { MessageBox } from "react-chat-elements"
<MessageBox
  position={"left"}
  type={"text"}
  text={<div>自定义组件</div>}
  className="custom-class"
/>
Photo Message
图片消息,在基础的消息组件上增加了点击放大功能
import { MessageBox } from "react-chat-elements"
<MessageBox
  position={"left"}
  type={"photo"}
  data={{
      uri: "https://picsum.photos/200/200",
  }}
  onOpen={handleOpenImg}
/>
const handleOpenImg = (e) => {
  if (e?.target?.tagName === 'IMG') {
      const overlay = document.getElementById('img-overlay');
      const overlayImg = document.getElementById('overlay-img');
      const src = e?.target?.src;
      overlay.style.display = 'flex';
      overlayImg.src = src;
      overlay?.addEventListener('click', function () {
        overlay.style.display = 'none';
      });
   }
 };
File Message
文件消息,需求需要自定义file的icon、增加展示信息并且提供点击下载功能,所以通过定义上文提到的自定义class, text 属性以及 onDownload 实现
import { MessageBox } from "react-chat-elements";
<MessageBox
  position={"left"}
  type={"file"}
  text={<>
          <div className="file-name">****.pdf</div>
          <div className="file-info">
            <div className="size">592.5kb</div>
            <div className="date">2024.10.06</div>
          </div>
        </>}
  data={{
    uri: "https://www.sample-videos.com/pdf/Sample-pdf-5mb.pdf"
  }}
  onDownload={handleDownLoad}
/>
const handleDownLoad = (e) => {
    // 执行下载逻辑
}
使用总结
优点
- 集成方便,熟悉react的同学非常容易上手
 - 可定制程度高
 
不足之处
- 无法自定义Avatar,与前面提到的定制程度高有些冲突,但是目前确实还没有找到能够将图像的在线链接替换为 reactNode 的方法,如果有哪位大佬有思路望不吝赐教
 
todo
- 适配移动端
 - 请求message的时机优化,自动滚动至底部(对话中存在图片消息,图片加载时间如何解决)
 
构建交互式聊天界面:react-chat-element 实战小计的更多相关文章
- Android学习笔记(十二)——实战:制作一个聊天界面
		
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
 - 【腾讯Bugly干货分享】React Native项目实战总结
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
 - python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)
		
一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...
 - iOS打开手机QQ与指定用户聊天界面
		
开发中遇到一个联系客服qq的需求,找到这么一个实现方法,先记录下来.大概的原理就是,iOS启动第三方应用是采用schema模式的,这有点像url,打开不同的界面使用不同的地址.但这个url怎么得来的还 ...
 - [iOS基础控件 - 6.9] 聊天界面Demo
		
A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...
 - Android,iOS,浏览器打开手机QQ与指定用户聊天界面
		
在浏览器中可以通过JS代码打开QQ并弹出聊天界面,一般作为客服QQ使用.而在移动端腾讯貌似没有公布提供类似API,但是却可以使用schema模式来启动手机QQ. 以下为具体代码: 浏览器(包括手机浏览 ...
 - 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序载入事件)
		
在了解了PhoneGap中都有哪些事件之后,本节将開始对这些事件的使用方法进行具体地介绍.本节要介绍的是程序载入事件,也就是deviceready.pause和resume这3个事件. [范例4-2 ...
 - 高仿qq聊天界面
		
高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...
 - Android 内部启动其他应用,以及打开指定qq聊天界面
		
在自己应用中打开第三方应用,有好多种方法,这里举例一种: //以打开微信为例,前提需要知道打开应用的包名,一般一个发布版本的应用,包名不会轻易改变的,但是,打开QQ就要注意了,毕竟QQ的发布版本有不下 ...
 - 百行go代码构建p2p聊天室
		
百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...
 
随机推荐
- CSS – rem, em, px
			
参考: 掘金 – 如何更愉快地使用em -- 别说你懂CSS相对单位 绝对值 vs 相对值 px, cm, mm 这些是绝对值. rem, em 是相对值. 绝对值就是最终的尺寸. 相对值的意思是它不 ...
 - ASP.NET Core – Program.cs and Startup.cs 小笔记
			
前言 ASP.NET Core 6.0 以后, 默认模板去掉了 Program.cs 的 namespace, class 和 Startup.cs, 一开始看会有点懵. 这篇大概记入一下, prog ...
 - windows在cygwin64下使用acme.sh批量签发Let's Encrypt的ssl证书,并用powershell重新分配iis证书
			
使用前提 本脚本是在使用阿里云Windows服务器的前提,如果使用其他dns服务,请参看acme.sh的dns相关文档 配置好cygwin64.acme.sh并配置好阿里云账户,openssl最好也安 ...
 - QT6 QML编程
			
QT6 QML编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技 ...
 - Linux_Bash_Shell_索引数组和关联数组及稀疏数组
			
1. 索引数组 一.什么是索引数组? 所谓索引数组就是普通数组,以整数作为数组元素的索引下标. 二.实例. 备注: (a)使用-a选项定义索引数组,使用一对小括号()定义数组中的元素列表. (b)索引 ...
 - 如何更改Wordpress语言为中文
			
在使用WordPress的时候,一般安装默认语言是英文,可以在后台设置里面直接修改站点语言为简体中文,当后台没有语言选项框的这一栏,如下图所示,该怎么办呢? 这个时候我们可以找到文件wp-config ...
 - neo4j 统计多个节点之间关系总和的写法-包含多个collect合并成一个并去重操作
			
在使用neo4j数据库时,会遇到计算与指定节点产生关联的数量统计需求,例如指定6个节点1,2,3,4,5,6需要找出与这6个节点中4个节点有关联的节点(要求排除这6个节点的数据) 先看实现查询语句: ...
 - .net6 中 Blazor PageTitle 设置无效的解决方法
			
直接在 razor 页面里添加 <PageTitle>xxx</PageTitle> 标签无效时的解决方法 For using the <PageTitle> ta ...
 - android ion
			
1. 简介 Android的ION子系统的目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存.说来简单,其实不易.在Soc硬件中,许多设备可以进行DMA,这些设备可能有不 ...
 - c#传统读取配置文件
			
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; namespace C ...