react仿微信聊天室|react即时聊天IM系统|react群聊

react+redux仿微信聊天IM实战|react仿微信界面|react多人群聊天室

最近一直捣鼓react开发,就运用react开发了个仿微信聊天室reactChatRoom项目,基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+antdesign+wcPop等技术混合开发,实现了聊天记录界面下拉刷新、发送消息、表情(动图),图片、视频预览,打赏、红包等功能。

vue聊天室:https://blog.csdn.net/yanxinyun1990/article/details/89038427

   

◆ react入口页面index.js 及package.json依赖注入

/**  @desc 入口页面index.js*/
import React from 'react';
import ReactDOM from 'react-dom';
// import {HashRouter as Router, Route} from 'react-router-dom'
import App from './App';// 引入状态管理
import {Provider} from 'react-redux'
import {store} from './store'// 导入公共样式
import './assets/fonts/iconfont.css'
import './assets/css/reset.css'
import './assets/css/layout.css'
// 引入wcPop弹窗样式
import './assets/js/wcPop/skin/wcPop.css'// 引入js
import './assets/js/fontSize'ReactDOM.render(<Provider store={store}>{/* <Router><Route path="/" component={App} /></Router> */}<App /></Provider>,document.getElementById('app')
);
{"name": "react-chatroom","version": "0.1.0","private": true,"author": "andy","dependencies": {"react": "^16.8.6","react-dom": "^16.8.6","react-redux": "^7.0.3","react-router-dom": "^5.0.0","react-scripts": "0.9.x","redux": "^4.0.1"},"devDependencies": {"jquery": "^2.2.3","react-loadable": "^5.5.0","react-photoswipe": "^1.3.0","react-pullload": "^1.2.0","redux-thunk": "^2.3.0","swiper": "^4.5.0","webpack": "^1.13.1","webpack-dev-server": "^1.12.0"},"scripts": {"start": "set HOST=localhost&&set PORT=3003 && react-scripts start","build": "react-scripts build","test": "react-scripts test --env=jsdom","eject": "react-scripts eject"}
}

  

  

  

  

  

  

◆ react登录注册验证、拦截

import React, { Component } from 'react';
import { Link } from 'react-router-dom'
import { connect } from 'react-redux';import * as actions from '../../store/action'// 引入wcPop弹窗插件
import { wcPop } from '../../assets/js/wcPop/wcPop.js'class Login extends Component {constructor(props) {super(props)this.state = {tel: '',pwd: '',vcode: '',vcodeText: '获取验证码',disabled: false,time: 0}}componentDidMount(){if(this.props.token){this.props.history.push('/')}}render() {return (<div className="wcim__lgregWrapper flexbox flex__direction-column">......</div>)}// 提交表单handleSubmit = (e) => {e.preventDefault();var that = thisthis.state.tel = this.refs.tel.valuethis.state.pwd = this.refs.pwd.valuethis.state.vcode = this.refs.vcode.valueif (!this.state.tel) {wcPop({ content: '手机号不能为空!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else if (!checkTel(this.state.tel)) {wcPop({ content: '手机号格式不正确!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else if (!this.state.pwd) {wcPop({ content: '密码不能为空!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else if (!this.state.vcode) {wcPop({ content: '验证码不能为空!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else {// 获取登录之前的页面地址let redirectUrl = this.props.location.state ? this.props.location.state.from.pathname : '/'// 设置tokenthis.props.authToken(getToken())this.props.authUser(this.state.tel)wcPop({content: '注册成功!', style: 'background:#41b883;color:#fff;', time: 2,end: function () {that.props.history.push(redirectUrl)}});}}// 60s倒计时handleVcode = (e) => {e.preventDefault();this.state.tel = this.refs.tel.valueif (!this.state.tel) {wcPop({ content: '手机号不能为空!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else if (!checkTel(this.state.tel)) {wcPop({ content: '手机号格式不正确!', style: 'background:#ff3b30;color:#fff;', time: 2 });} else {this.state.time = 60this.state.disabled = truethis.countDown();}}countDown = (e) => {if(this.state.time > 0){this.state.time--this.setState({vcodeText: '获取验证码(' + this.state.time + ')'})// setTimeout(this.countDown, 1000);setTimeout(() => {this.countDown()}, 1000);}else{this.setState({time: 0,vcodeText: '获取验证码',disabled: false})}}
}const mapStateToProps = (state) => {return {...state.auth}
}export default connect(mapStateToProps, {authToken: actions.setToken,authUser: actions.setUser
})(Login)
constructor(props){super(props)console.log('群聊页面参数:\n' + JSON.stringify(props, null, 2))
}// ******react-photoswipe配置选项
state = {images: [{// src: 'http://lorempixel.com/1200/900/sports/1',src: require('../../assets/img/placeholder/wchat__img03.jpg'),w: 345,h: 700,// title: 'Image 1'},{// src: 'http://lorempixel.com/1200/900/sports/2',src: require('../../assets/img/placeholder/wchat__img01.jpg'),w: 405,h: 275,// title: 'Image 2'},{src: require('../../assets/img/placeholder/wchat__img02.jpg'),w: 865,h: 265,}],isOpen: false,// 配置参数options: {// index: 1, //显示图片索引loop: false, //循环显示fullscreenEl: false, //全屏按钮shareEl: false, //分享按钮arrowEl: false, //左右箭头captionEl: false, //标题描述}
}
photoSwipeClose = () => {this.setState({isOpen: false})
}
photoSwipeOpen(index){this.setState({isOpen: true})this.state.options.index = index
}

◆ react地址路由管理

/**  @desc 页面地址路由js*/// 引入页面组件
import Login from '../views/auth/login'
import Register from '../views/auth/register'
import Index from '../views/index'
import Contact from '../views/contact'
import Uinfo from '../views/contact/uinfo'
import Ucenter from '../views/ucenter'
import Wallet from '../views/wallet'
import GroupChat from '../views/chat/group-chat'
import SingleChat from '../views/chat/single-chat'
import GroupInfo from '../views/chat/group-info'// export default {Index, Contact, Ucenter};export default [// 登录、注册{path: '/login', name: 'Login', component: Login,},{path: '/register', name: 'Register', component: Register,},// 首页、联系人、我{path: '/index', name: 'App', component: Index,meta: { showHeader: true, showTabBar: true, requireAuth: true },},{path: '/contact', name: 'Contact', component: Contact,meta: { showHeader: true, showTabBar: true, requireAuth: true },},{path: '/contact/uinfo', name: 'Uinfo', component: Uinfo,},{path: '/ucenter', name: 'Ucenter', component: Ucenter,meta: { showHeader: true, showTabBar: true, requireAuth: true },},// 聊天页面{path: '/chat/group-chat', name: 'GroupChat', component: GroupChat,meta: { requireAuth: true },},{path: '/chat/single-chat', name: 'SingleChat', component: SingleChat,meta: { requireAuth: true },},{path: '/chat/group-info', name: 'GroupInfo', component: GroupInfo,meta: { requireAuth: true },},// 钱包{path: '/wallet', name: 'Wallet', component: Wallet,meta: { requireAuth: true },}// ...
]

欢迎关注我的技术博客:https://www.cnblogs.com/xiaoyan2017

一起学习,一起进步,有问题随时联系,一起解决!!!

 

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

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

相关文章

DES加密解密 Feistel算法网络结构 详讲

文章目录 简单知识导入&#xff1a;具体过程&#xff1a;IP置换&#xff08; 64 − > 64 64->64 64−>64&#xff09;轮函数--E扩展置换&#xff08; 32 − > 48 32->48 32−>48&#xff09;轮函数--与子密钥异或&#xff08; 48 − > 48 48->48 48−&…

2023年春秋杯网络安全联赛春季赛Reverse题目复现

文章目录 一.sum1. 分析程序逻辑2.解数独矩阵3.解题脚本 二.Poisoned_tea_CHELL1. 重新识别函数及程序逻辑分析2.IDA动态调试(attach附加调试)3. 输入选项进行单步调试4.解题脚本 BWBAOldSymbolicCode 一.sum 1. 分析程序逻辑 这里直接贴上当时分析的结果,根据程序行为不难猜…

NLP相关知识点(慢慢更新)

一、基础概念 1.1. NLP 中的 Tokenization 是什么? NLP技术中 Tokenization 也可以被称作是“word segmentation”&#xff0c;直译为中文是指 分词。 分词是NLP的基础任务&#xff0c;按照特定需求能把文本中的句子、段落切分成一个字符串序列&#xff08;其中的元素通常称…

SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

文章目录 一.SpringCouldVue3-Element-Admin 登录接口&#xff0c;用户信息接口以及Token验证的实现【Taurus教育平台】1.1 背景1.2 数据库 二、登录接口及其Token实现2.1 前端2.2 后端2.2.1 控制层2.2.2 service层2.2.3 工具类&#xff1a;CreateJwt2.2.4 Dao-Mapper 三、用户…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Django通过nginx 部署(成功运行)

配置python版本和ssh启用root参考其它文章 完整项目路径 /root/projects/mysutra_pro 下级目录/root/projects/mysutra_pro/mysutra是源码目录 rootVM-12-2-debian:~/projects/mysutra_pro# ls db.sqlite3 manage.py ms_env mysutra rootVM-12-2-debian:~/projects/mysutr…

es Elasticsearch的增删改查(含数组操作)(类型,原理) - from chatgpt

父文章 算法中的特征的保存, es 和 mysql 和 odps hadoop hbase的区别_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch如何做到数十亿数据查询毫秒级响应&#xff1f; - 知乎 ES系列之利用filter让你的查询效率飞起来_es filter_lucasma.eth的博客-CSDN博客 ES查询…

文心一言对比chatgpt

文章目录 一、 介绍二、 回复速度比较三、 写代码能力四、 做表格能力五、 写文案能力六、 解决数学问题能力七、 绘画能力八、 实时更新信息九、 总结 一、 介绍 文心一言对比chatgpt。 测试了上百个案例&#xff0c;挑选几个经典的案例。 二、 回复速度比较 百度文心耗时10…

CSDN chatGPT初体验

我的问题&#xff1a;用java实现一个B树 public class BTree {private int t;private Node root;private class Node {private int n;private boolean leaf;private int[] keys;private Node[] children;public Node(boolean leafNode) {this.n 0;this.leaf leafNode;this.ke…

chatgpt赋能python:Python岗位需求日渐增加

Python岗位需求日渐增加 Python编程语言在当前的IT行业中越来越受欢迎。其灵活性和易用性使得Python在各种领域中使用广泛&#xff0c;比如Web开发、数据科学、人工智能等。作为一名有10年Python编程经验的工程师&#xff0c;我认为Python是一种非常有前途的编程语言&#xff…

ChatGPT可能被滥用于网络犯罪

科技是一把双刃剑 ChatGPT一经发布&#xff0c;短时间内就成为了现象级的应用。其清晰明确的回答和丰富的知识&#xff0c;昭示着AI技术造福人类&#xff0c;彻底简化我们生活工作这一美好的未来愿景。对于解决各行各业的许多问题&#xff0c;ChatGPT也提供了另外一种思路&…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表&#xff0c;存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息 下面是一个示例数据表&#xff1a; Device IDSerial NumberIPMACAccess URLUsernamePassword…

七大语言模型“偏见与毒性”的角逐,ChatGpt3.5综合表现优良

颠覆性的技术进步和人工智能的快速发展&#xff0c;催生了现如今LLM&#xff08;大型语言模型&#xff09;和AIGC&#xff08;AI生成内容&#xff09;的盛行。这些创新性的模型和算法不仅能够理解、生成和处理人类语言&#xff0c;还能够模拟智能思维和创造力&#xff0c;成为各…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

机器之心报道 机器之心编辑部 阿里&#xff1a;大模型也是基础设施。 4 月 7 日下午&#xff0c;阿里云没有一点预告的突然宣布&#xff0c;自研类 ChatGPT 产品开启企业邀测&#xff0c;模型名为「通义千问」。 虽然是非常小范围的测试&#xff0c;但邀测消息刚放出&#xff…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

英伟达帝国的一道裂缝

2012年&#xff0c;AI圈发生了两件大事&#xff0c;按时间顺序&#xff0c;第一件是谷歌组团已久的Google Brain发布“出道作”——一个能够识别猫的深度学习网络“谷歌猫”&#xff0c;74.8%的识别准确率&#xff0c;比知名识别图像大赛ImageNet前一年获胜算法的74%还要高出0.…

也谈“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

写文、画图、替人直播,小巨头混战AIGC

文&#xff5c;光锥智能&#xff0c;作者&#xff5c;黄小艺、郝鑫&#xff0c;编辑&#xff5c;刘雨琦 大模型的春风&#xff0c;吹乱了内容平台们的心。 作为“被革命”的第一梯队&#xff0c;内容平台们跃跃欲试&#xff0c;欲抢占时间窗口。 5月6日&#xff0c;小红书被曝…

AI来势汹汹,这份「生存计划」请查收!

AIGC即人工智能生产内容&#xff0c;最近可太火了&#xff0c;但是火了这么久&#xff0c;有些人都没明白到底为什么火&#xff1f;甚至不明所以觉得“AI替代XX”&#xff0c;小编认为没必要焦虑&#xff0c;一起来看一下吧。 AI工具们一日千张图、3小时写一本书、2分钟构建一个…