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 实战小计的更多相关文章

  1. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  2. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  3. python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)

    一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...

  4. iOS打开手机QQ与指定用户聊天界面

    开发中遇到一个联系客服qq的需求,找到这么一个实现方法,先记录下来.大概的原理就是,iOS启动第三方应用是采用schema模式的,这有点像url,打开不同的界面使用不同的地址.但这个url怎么得来的还 ...

  5. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  6. Android,iOS,浏览器打开手机QQ与指定用户聊天界面

    在浏览器中可以通过JS代码打开QQ并弹出聊天界面,一般作为客服QQ使用.而在移动端腾讯貌似没有公布提供类似API,但是却可以使用schema模式来启动手机QQ. 以下为具体代码: 浏览器(包括手机浏览 ...

  7. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序载入事件)

    在了解了PhoneGap中都有哪些事件之后,本节将開始对这些事件的使用方法进行具体地介绍.本节要介绍的是程序载入事件,也就是deviceready.pause和resume这3个事件. [范例4-2 ...

  8. 高仿qq聊天界面

    高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...

  9. Android 内部启动其他应用,以及打开指定qq聊天界面

    在自己应用中打开第三方应用,有好多种方法,这里举例一种: //以打开微信为例,前提需要知道打开应用的包名,一般一个发布版本的应用,包名不会轻易改变的,但是,打开QQ就要注意了,毕竟QQ的发布版本有不下 ...

  10. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

随机推荐

  1. Angular 18+ 高级教程 – 初识 Angular

    Before Starting 深入学习 Angular 是一件非常耗时耗力的事情. 实施 Angular 到项目中同样也是一件非常耗时耗力的事情. 在我们做出这么大的投入之前,我们有必要先思考以下几 ...

  2. TypeScript – 冷知识

    当 generic return 遇上 parameter 报错了.原因是 querySelector 默认返回类型是抽象的 Element. 而 method 参数要求的是具体的 InputElem ...

  3. JavaScript——基础语法

    书写语法    输出语句    变量    数据类型    运算符        == 与 === 区别:       ==:         1.判断类型是否一样,如果不一样,则进行类型转换     ...

  4. 用C#写个PDF批量合并工具简化日常工作

    一. 前言 由于项目需要编写大量的材料,以及各种签字表格.文书等,最后以PDF作为材料交付的文档格式,过程文档时有变化或补充,故此处理PDF文档已经成为日常工作的一部分. 网上有各种PDF处理工具,总 ...

  5. std::variant快速上手

    std::variant 是 C++17 引入的一种类型安全的联合体,用来存储多个可能类型中的一种值,且保证使用时的类型安全.相比于传统的 union,std::variant 不仅能够存储不同类型的 ...

  6. 数列专题2 求数列的前n项和

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...

  7. iOS通知使用小结

    最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...

  8. C#的函数使用 和参数修饰符 out ref params

    // 函数和方法 // 函数好比对象的动作行为 在定义函数的时候,职责(作用/功能)越单一越好 满足高内聚 低耦合的开发思路 // 变量的命名规则 小驼峰 // 函数的命名规则 大驼峰 动词开头 // ...

  9. 11-react使用props.children 处理父子组件之间的传值

    // props.children 组件传值 import { Component } from "react" import reactDom from "react- ...

  10. 使用 GPU-Operator 与 KubeSphere 简化深度学习训练与 GPU 监控

    本文将从 GPU-Operator 概念介绍.安装部署.深度训练测试应用部署,以及在 KubeSphere 使用自定义监控面板对接 GPU 监控,从原理到实践,逐步浅析介绍与实践 GPU-Operat ...