构建交互式聊天界面: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 ...
随机推荐
- Redis入门 - C#|.NET Core封装Nuget包
经过前面章节的学习,可以说大家已经算Redis开发入门了.已经可以去到项目上磨砺了. 但是今天我还想和大家分享一章:封装自己的Redis C#库,然后打包成Nuget包. 首先要说明的是:不是要自己开 ...
- uniCloud
https://doc.dcloud.net.cn/uniCloud/ 什么是uniCloud uniCloud推出了opendb,包含了大量的开源数据库模板,常见数据表无需自己设计 uniCloud ...
- 2024-09-21:用go语言,给定一个字符串 s,字符串中的每个字符要么是小写字母,要么是问号‘?‘。对于一个仅包含小写字母的字符串t,我们定义cost(i)为在t的前i个字符中与t[i]相同的字
2024-09-21:用go语言,给定一个字符串 s,字符串中的每个字符要么是小写字母,要么是问号'?'.对于一个仅包含小写字母的字符串t,我们定义cost(i)为在t的前i个字符中与t[i]相同的字 ...
- 【赵渝强老师】Redis的慢查询日志
Redis慢查询日志帮助开发和运维人员定位系统存在的慢操作.慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息 ...
- el-table 宽度自适应bug
和 flex 一起使用的时候会有这个问题.只能自动变宽不能自动变窄. 在 flex-grow:1; 的那一层设置 overflow: auto;
- `std::future`--异步的优势
std::future 相比于直接使用线程在 C++ 中有几个重要的优势,主要体现在同步结果获取.简化代码管理.以及更安全的异步任务管理等方面.以下是 std::future 的一些主要优势: 1. ...
- 高通BoostFramework概要介绍
概要介绍 为了保证Android系统的顺滑体验,各个厂家都有针对性的对Android系统做了性能优化的方案.高通也基于AOSP开发了一套性能优化框架,本文叫做BoostFramework.本文将介绍下 ...
- Java日期时间API系列18-----Jdk8中java.time包中的新的日期时间API类,java日期计算5,其他常用日期计算,星期计算,闰年计算等
通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析中可以看出,java8中的方法特别丰富,一些常用的计算如星期计算,闰年计算等 ...
- 2023年1月中国数据库排行榜:OceanBase 持续两月登顶,前四甲青云直上开新局
一元复始,万象更新. 国产数据库在经历过耕获菑畲的一年后,产品.生态.人才队伍建设等都取得了重大的进展.2023年1月 墨天轮中国数据库流行度排行 火热出炉,本月排行榜"属性"列新 ...
- C#内存缓存
把缓存数据放到应用程序的内存,内存缓存中保存的是一些列键值对 :生命周期就是关闭程序的时候,内存数据就会被销毁 : IMemerCache 接口 Get 获取缓存 Set 设置缓存