首页 > 其他分享 >构建交互式聊天界面:react-chat-element 实战小计

构建交互式聊天界面:react-chat-element 实战小计

时间:2024-11-12 22:02:13浏览次数:1  
标签:MessageBox elements none element react chat 组件

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

消息的类型,更多参考essagetype-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的时机优化,自动滚动至底部(对话中存在图片消息,图片加载时间如何解决)

 

标签:MessageBox,elements,none,element,react,chat,组件
From: https://www.cnblogs.com/little-sheep10/p/18540819

相关文章

  • AI之旅:起步即迈出重要一步,博客园与 Chat2DB 达成战略合作
    AI之旅开篇之后的第一篇本准备写一篇简单的技术分享,却遇到一个「意外」,这个意外惊喜让园子的「AI之旅」起步即迈出重要一步。经过3个多月的接触,园子最近终于和Chat2DB达成了战略合作,以下内容是Chat2DB创始人发布的战略合作公告博文:在AI技术的浪潮中,我们时常思考,如何让工具......
  • OpenAI大动作:ChatGPT成全球第八大网站,o1满血版发布在即,Sora即将震撼登场?
    【雪球导读】「OpenAI震撼新动态!」爆炸性新闻!OpenAI大动作:ChatGPT飙升至全球第八大网站,o1模型满血版呼之欲出,Sora震撼上线在即!快来一探究竟,AI的未来已来,你准备好了吗?1.ChatGPT震撼全球:跃升为全球第八大网站!CEOSamAltman在推特上引爆了一枚重磅炸弹:ChatGPT的......
  • elementUI中时间控件,设置范围一个月的方法
    <template><el-date-pickerstyle="width:260px;"V-model="timeRange"type="daterange"range-separator="value-format="yyyy-MM-dd"start-placeholder="开始日期"end-pla......
  • 代码整洁之道:在 React 项目中使用 ESLint 的最佳实践
    前言在现代前端开发过程中,保持代码的质量和一致性至关重要。作为一个强大的静态代码分析工具,ESLint能够帮助开发者发现和修复代码中的问题,从而确保代码的可维护性和稳定性。在本文中,我们将探讨在React项目中使用ESLint的最佳实践,涵盖安装、配置、自定义规则以及与其......
  • ReactPress:功能全面的开源发布平台
    ReactPressGithub项目地址:https://github.com/fecommunity/reactpress欢迎Star。此项目是用于构建博客网站的,包含前台展示、管理后台和后端。此项目是基于React+antd+NestJS+NextJS+MySQL的,项目已经开源,项目地址在github上,喜欢的,欢迎给个star。项目地......
  • 一定要chatgpt吗?
    国内在AI大模型领域的发展非常迅速,已经推出了许多具有影响力的模型。以下是一些中国的主要AI大模型:百度文心一言:由百度推出,是一个知识增强型对话语言模型,具有千亿级参数量,在知识问答、创意生成等任务上表现出色。阿里通义千问:由阿里巴巴推出,是一个大规模预训练语言模型,支持......
  • 实现Reactor反应堆模型:框架搭建
    实现Reactor反应堆模型:框架搭建Reactor模型是一种常用于处理大量并发I/O操作的设计模式,特别适用于服务器端的网络编程。该模型通过事件驱动的方式,将I/O操作的处理与具体的业务逻辑分离,从而提高系统的并发处理能力和响应速度。本文将详细介绍如何搭建一个Reactor反应堆模型......
  • LangGraph入门:构建ReACT架构的智能Agent
    引言在人工智能和大语言模型(LLM)快速发展的今天,如何构建高效、灵活的智能Agent成为了一个热门话题。LangGraph作为一个强大的工具,为我们提供了一种新的方式来实现复杂的AI工作流,特别是在构建ReACT(ReasoningandActing)架构的智能Agent方面表现出色。本文将深入探讨如何使用LangGra......
  • Langchain-Chatchat 0.3 -- miniconda
    Langchain-Chatchat0.3的版本更新到了0.3本地不再使用fastchat了,这次准备使用Xinference为了方便python的版本管理,这次使用miniconda安装miniconda其实很简单的,下载对应的版本下一步下一步就行了https://docs.anaconda.com/miniconda/本次还是用的win11,下载Miniconda3......
  • vue3+element plus +js 实现树形和末级展开是表格
    1、实现一个树形和末级展开是表格,需要支持大数据量,因此使用VirtualizedTable虚拟化表格 el-table-v22、效果图 3、代码<template><el-table-v2:header-height="0"v-model:expanded-row-keys="expandedRowKeys":columns="columns"......