构建交互式聊天界面: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 ...
随机推荐
- DOM – Work with Document.styleSheets and JS/Scss Breakpoint Media Query
前言 为了方便管理, 我们会定义 CSS Variables, 类似于全局变量. 有时候做特效的时候还需要 JavaScript 配合, 这时就会希望 JavaScript 可以获取到 CSC Var ...
- SpringMVC —— 请求参数
请求映射路径 请求方式 get请求传参 post请求传参 POST请求中文参数乱码问题 请求参数(五种类型数据参数) ...
- Flutter(able) 的单例模式
文/ 杨加康,CFUG 社区成员,<Flutter 开发之旅从南到北>作者,小米工程师 单例设计模式(Singleton Design Pattern)理解起来非常简单. 一个类只允许创建 ...
- USB总线-Linux内核USB设备驱动之UAC2驱动分析(十)
1.概述 UVC(USB Audio Class)定义了使用USB协议播放或采集音频数据的设备应当遵循的规范.目前,UAC协议有UAC1.0和UAC2.0. UAC2.0协议相比UAC1.0协议,提供 ...
- python:批量删除指定文件目录中多个文件
#coding:utf-8# 任务需要,需要删除多余的文件,手动删除太麻烦,几行python搞定 import os from glob import glob path = r"/medi ...
- Transformer原理+代码详解
简介 Transformer是一种深度学习模型,它在自然语言处理(NLP)领域中非常流行和有效.它最初由Vaswani等人在2017年的论文<Attention is All You Need& ...
- 2021年第十一届数据技术嘉年华(DTC)资料分享
数据技术嘉年华(DTC)是由由中国DBA联盟(ACDU)和墨天轮社区联合主办的数据技术领域的盛会,至今已成功举办11届,吸引和聚集了众多数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者,于此进 ...
- VM Ware 安装mac OS xxx 系统
1. unlock 文件破解Vm Ware 默认不能安装苹果系统 :https://drive.google.com/file/d/1_AUeYh5JYltqjnuztQh-5UTomAIVBcLZ/ ...
- amfe-flexible 包设置rem的基本值 vue 移动端适配方案
下载 安装 :npm i -S amfe-flexible gw:GitHub - amfe/lib-flexible: 可伸缩布局方案 下载 2 个第三方包即可实现移动端适配 amfe-flexib ...
- Python之py9-py9博客情况获取
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import datetime import requests url ...