react聊天组件:用antd和react-chat-element组装的聊天列表

效果图:
在这里插入图片描述

安装库

用到了antd design和github上的一个库:react-chat-element
(1)antd design:
安装:yarn add antd
修改 src/App.css,在文件顶部引入 antd/dist/antd.css

@import '~antd/dist/antd.css';

即可使用antd的组件
(2)react-chat-element:
github网址为:Detaysoft/react-chat-elements

安装:npm install react-chat-elements --save即可

代码和基本说明

import React, {createRef} from "react";
import {ChatList, MessageList} from 'react-chat-elements'
import 'react-chat-elements/dist/main.css';
import {Button, Row, Col, Divider, Input} from "antd";const {TextArea} = Input;class ChatWidget extends React.Component {constructor(props) {super(props);this.state = {user: null,msgDataList: [],sendMsg: "",}this.clickButton = this.clickButton.bind(this);this.messagesEnd = createRef();}componentDidMount() {let list = [];for (let i = 0; i < 10; ++i)list.push({position: 'left',type: 'text',text: 'hello' + i,date: new Date(),});this.setState({msgDataList: list});this.setState({user: this.props.user});}componentWillReceiveProps(nextProps, nextContext) {this.setState({user: nextProps.user});}clickButton() {let list = this.state.msgDataList;list.push({position: 'right',type: 'text',text: this.state.sendMsg,date: new Date(),})this.setState({msgDataList: list});this.setState({sendMsg: ""});}componentDidUpdate(prevProps, prevState, snapshot) {this.messagesEnd.scrollTop = this.messagesEnd.scrollHeight;}render() {return (<Col style={{width: 700,height: 600,display: 'inline-block',borderRight: "3px solid",borderTop: "3px solid",borderBottom: "3px solid",}}><Row><Col style={{width: 700,height: 40,textAlign: "center",verticalAlign: "middle",fontSize: 20}}>{this.state.user == null ? "" : this.state.user.title}</Col></Row><Row><div style={{width: 700,height: 420,textAlign: "center",verticalAlign: "middle",fontSize: 20,overflow: "auto",backgroundColor: "\t#C0C0C0"}}ref={(el) => {this.messagesEnd = el;}}><MessageListclassName='message-list'dataSource={this.state.msgDataList}/></div></Row><Row><Col style={{width: 700,textAlign: "center",verticalAlign: "middle",fontSize: 20}}><TextArea rows={4} onChange={e => {this.setState({sendMsg: e.target.value});}}ref={el => (this.inputRef = el)}value={this.state.sendMsg}/><Button type="primary" onClick={this.clickButton}>发送</Button></Col></Row></Col>);}
}class PrivateChatView extends React.Component {constructor(props) {super(props);this.state = {userList: [],clickUser: null,}}componentDidMount() {let list = [];for (let i = 0; i < 14; ++i)list.push({avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',alt: 'Reactjs',title: '用户' + i,subtitle: 'What are you doing?',date: new Date(),unread: Math.floor(Math.random() * 10),});this.setState({userList: list});this.setState({clickUser: list[0]});}render() {return (<div><Divider orientation="left" style={{color: '#333', fontWeight: 'normal'}}>私信列表</Divider><Row><Col style={{width: 400,height: 600,display: 'inline-block',border: "3px solid",overflow:"auto"}}><ChatListclassName='chat-list'onClick={e => this.setState({clickUser: e})}dataSource={this.state.userList}/></Col>{this.state.userList.length == 0 ? <div>无私信</div> : <ChatWidget user={this.state.clickUser}/>}</Row></div>);}
}export default PrivateChatView;

ChatWidget是右边的对话窗口,PrivateChatView是整个聊天组件(包括了聊天列表和ChatWidget)。

PrivateChatView中的userList表示聊天列表的数组。如果想要改变外表(比如未读什么的),详细可以见react-chat-element中对于chatList的描述。PrivateChatView会传一个user参数给ChatWidget,表示是哪一个用户被点击。

ChatWidget接受PrivateChatView传过来的user参数。msgDataList表示聊天记录数组,通过设置数组元素的position是‘right’还是‘left’来决定是消息气泡显示在左边还是右边。

一些问题:
我设置的PrivateChatView里面的聊天列表和ChatWidget用的是display:inline-block,如果将浏览器缩小显示,聊天列表和ChatWidget就会变成上下显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31902.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:人脸识别技术进程Python应用

人脸识别技术进程Python应用 人脸识别技术是计算机视觉领域的重要应用&#xff0c;随着深度学习技术的发展&#xff0c;越来越多的人开始关注并使用这种技术。Python作为一种高效、易用的编程语言&#xff0c;也在人脸识别领域得到了广泛应用&#xff0c;本文将介绍Python如何…

chatgpt赋能python:Python人脸搜索:进入智能搜索的新时代

Python人脸搜索&#xff1a;进入智能搜索的新时代 随着神经网络和深度学习的迅猛发展&#xff0c;人工智能已经成为许多领域中最重要的研究方向。人脸搜索的普及&#xff0c;是人工智能引领的技术革命最具有代表性的例子。Python作为一种高级编程语言&#xff0c;在人脸搜索领…

chatgpt赋能python:Python实现人脸识别系统

Python实现人脸识别系统 在当今科技发展的时代&#xff0c;人脸识别技术已经广泛应用于各行各业中&#xff0c;如安全防范、金融交易、医学检测等领域&#xff0c;成为了一个备受瞩目的技术。Python作为当今最流行的编程语言之一&#xff0c;其实现人脸识别系统的能力备受重视…

chatgpt赋能python:人脸识别软件的作用及发展

人脸识别软件的作用及发展 随着科技的飞速发展&#xff0c;人脸识别技术越来越广泛地应用于各个领域&#xff0c;例如安全监控、金融交易、社交网络等。人脸识别软件通过识别人脸图像中的特征来进行身份验证或辨认&#xff0c;具有高效、准确、便捷等优点。而Python作为一种易…

chatgpt赋能python:Python人脸匹配:自动识别人脸并进行匹配

Python人脸匹配&#xff1a;自动识别人脸并进行匹配 介绍 Python已经成为一种广泛使用的编程语言&#xff0c;在许多任务中被广泛应用。其中一项任务是人脸匹配&#xff0c;这是在安全性和身份验证方面非常有用的应用程序。Python提供了一些很好的库&#xff0c;使得在Python…

chatgpt赋能python:Python人脸识别教程

Python人脸识别教程 什么是人脸识别&#xff1f; 人脸识别是一种通过人脸图像进行身份识别的技术&#xff0c;根据人脸的特征信息进行比对&#xff0c;以识别一个人的身份。 Python人脸识别技术 Python是一种高级编程语言&#xff0c;现在被广泛应用于人工智能&#xff0c;…

IDEA官方中文插件!!!

随着IDEA2020.1版本的到来&#xff0c;官方也悄悄更新了IDEA的中文插件 不得不说&#xff0c;还是比较给力的。 打开设置–>插件&#xff1a; 搜索 Chinese (Simplified) Language Pack 下载重启&#xff0c;IDEA中文版就来啦。 整体效果还是不错的&#xff1a; ATFWU…

IDEA官方中文版插件

IDEA官方中文插件安装步骤&#xff1a; 打开Settings–>Plugins&#xff1a;搜索 Chinese (Simplified) Language Pack 下载重启&#xff0c;IDEA中文版安装完成。

IDEA好用的插件推荐

目录 1.Translation 2.GsonFormat 3. VisualVM Launcher 4.CodeGlance Pro 5.Key Promoter X 6.GenerateAllSetter 7..ignore 8.MyBatisCodeHelperPro 9.Grazie 10.Background Image Plus 1.Translation 翻译插件。程序员最痛苦的事莫过于阅读代码时遇到不懂的英文单词&#…

IDEA实用插件

IDEA中引入插件支持方式如下&#xff1a; 点击File-- Settings设置界面--PlugIns&#xff0c;安装指定的插件&#xff0c;安装后自动或手动重启IDEA。 1、Translation 【实用程度 ★★★★★】 用处&#xff1a;直接选中你想要翻译的词&#xff0c;然后右键选择&#xff0c;或…

idea中文版插件

IDEA怎么设置成中文&#xff1f; 首先点击左上角的File-Settings 进入设置 进入Settings后点击Plugins&#xff0c;在搜索框输入Chinese language pack&#xff0c;点击install安装插件 下载成功后&#xff0c;点击installed,找到下载的汉化插件&#xff0c;点击Restart IDE&…

如何缓解高考前紧张的情绪,ChatGPT这么说......

明天就要高考了&#xff0c;看到家长有各种打气的做法&#xff0c;既有上灵隐寺的&#xff0c;也有穿着旗袍希望旗开得胜的&#xff0c;还有说什么失败了不要紧的......&#xff0c;反正都是焦虑的不行。 面对高考&#xff0c;大多考生都会紧张&#xff0c;但适度的紧张对发挥出…

13、列表

一.列表 列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用’ , 隔开而且可以存放各种数据类型: 列表是python中的基础数据类型之一&#xff0c;其他语言中也有类似于列表的数据类型&#…

基于单片机无线防丢报警器设计过程分享

目录 【功能介绍】 【原理图】 【PCB】 【实物图】 【元器件清单】 【源代码】 【模块介绍】 【参考资料】 【参考文献】 【功能介绍】 本设计利用51单片机结合NRF24L01无线模块进行设计&#xff0c;防丢器分为两个部分&#xff0c;分为从机和主机&#xff0c;即发射模…

基于单片机倾角检测仪设计分享

目录 【功能介绍】 【原理图】 【PCB】 【实物图】 【元器件清单】 【源代码】 【参考资料】 【参考文献】 【功能介绍】 本设计利用51单片机为主控系统&#xff0c;采用三轴加速度传感器ADXL345进行倾角测量&#xff0c;可以实现两大功能&#xff1a; 实时显示当前测…

360数科港交所上市:市值超160亿港元 周鸿祎为大股东

雷递网 雷建平 11月29日 360数科股份有限公司 (股票代码&#xff1a;3660)今日在港交所主板上市&#xff0c;发行价为50.03港元&#xff0c;募资净额为2.77亿港元。 360数科开盘价为50.6港元&#xff0c;较发行价小幅上涨&#xff0c;收盘价为51.75港元&#xff0c;较发行价上涨…

80%的能力问题,都是态度问题

置顶 “进击的阿秀” 和优秀的人一起成长&#xff0c;做牛逼闪闪的职场青年 咱们开头先分享一个故事。 周鸿祎在创办3721的时候&#xff0c;有一次开会后嘱咐傅盛一定要做好会议记录。 周鸿祎天马行空地讲了好久&#xff0c;傅盛不仅把内容全记了下来&#xff0c;还仔细研究每段…

雷军以为会当一辈子码农,不料后来成了小米董事长

本文转自&#xff1a;IT时代网 不会写代码的CEO&#xff0c;不是好技术。在科技互联网行业&#xff0c;其创始人大都由技术人员组成&#xff0c;百度李彦宏&#xff0c;腾讯马化腾&#xff0c;360周鸿祎、特斯拉、SpaceX创始人马斯克&#xff0c;微软创始人比尔盖茨&#xff0…

周鸿鸿蒙系统,鸿蒙系统终于来了,它能否取代安卓?周鸿祎的观点一针见血!...

文|聪明小生 校对|李蓉婳 原创内容&#xff0c;请勿搬运抄袭&#xff0c;违者必究 如果说芯片是手机的心脏&#xff0c;那么操作系统则是手机的灵魂。这些年&#xff0c;尽管我国智能手机崛起速度飞快&#xff0c;但遗憾的是&#xff0c;不管是芯片还是操作系统&#xff0c;都比…

【送书福利-第十四期】ChatGPT时代 + PowerBI助力快速创建动态报表

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、内容介绍三、抽奖方…