基于react+react-dom+react-router-dom+redux+react-redux+webpack+nodeJs等技术混合开发的手机端仿微信界面聊天室——reactChatRoom,实现了聊天记录下拉刷新、发送消息、表情(动图),图片、视频预览,打赏、红包等功能。

技术选型

  • MVVM框架:react / react-dom
  • 状态管理:redux / react-redux
  • 页面路由:react-router-dom
  • 弹窗插件:wcPop
  • 打包工具:webpack 2.0
  • 环境配置:node.js + cnpm
  • 图片预览:react-photoswipe
  • 轮播滑动:swiper

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

{"name": "react-webchat","version": "0.1.0","private": true,"dependencies": {"react": "^16.8.6","react-dom": "^16.8.6","react-redux": "^7.1.0","react-router-dom": "^5.0.1","react-scripts": "0.9.x","redux": "^4.0.1","redux-thunk": "^2.3.0"},"devDependencies": {"jquery": "^2.2.3","react-custom-scrollbars": "^4.2.1","react-photoswipe": "^1.3.0","swiper": "^4.5.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"}
}
render() {let token = this.props.tokenreturn (<Router><div className="vChat-wrapper flexbox flex-alignc"><div className="vChat-panel" /*style={{ backgroundImage: `url(${require("./assets/img/placeholder/vchat__panel-bg02.jpg")})` }}*/ ><div className="vChat-inner flexbox">{/* //顶部(最大、最小、关闭) */}<Switch><WinBar /></Switch>{/* //侧边栏 */}<Switch><SideBar /></Switch>{/* //主页面 */}<div className="flex1 flexbox">{/* 路由容器 */}<Switch>{routers.map((item, index) => {return <Route key={index} path={item.path} exact render={props => (!item.meta || !item.meta.requireAuth ? (<item.component {...props} />) : (token ? <item.component {...props} /> : <Redirect to={{pathname: '/login', state: {from: props.location}}} />))} />})}{/* 初始化页面跳转 */}<Redirect push to="/index" /></Switch></div></div></div></div></Router>);}

◆ react+react-router-dom地址路由配置:

/**  @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 NewFriend from '../views/contact/new-friends'
import Ucenter from '../views/ucenter'
import News from '../views/news'
import NewsDetail from '../views/news/detail';export default [{path: '/login', name: 'Login', component: Login,meta: { hideSideBar: true },},{path: '/register', name: 'Register', component: Register,meta: { hideSideBar: true },},{path: '/index', name: 'App', component: Index,meta: { requireAuth: true },},{path: '/contact', name: 'Contact', component: Contact,meta: { requireAuth: true },},{path: '/contact/uinfo', name: 'Uinfo', component: Uinfo,},{path: '/contact/new-friends', name: 'NewFriend', component: NewFriend,meta: { requireAuth: true },},{path: '/news', name: 'News', component: News,},{path: '/news/detail', name: 'NewsDetail', component: NewsDetail,},{path: '/ucenter', name: 'Ucenter', component: Ucenter,meta: { requireAuth: true },},// ...
]

react+redux状态管理

// >>> 【编辑器+表情处理模块】------------------------------------------
// ...处理编辑器信息
function surrounds() {setTimeout(function () { //chromevar sel = window.getSelection();var anchorNode = sel.anchorNode;if (!anchorNode) return;if (sel.anchorNode === $(".J__wcEditor")[0] ||(sel.anchorNode.nodeType === 3 && sel.anchorNode.parentNode === $(".J__wcEditor")[0])) {var range = sel.getRangeAt(0);var p = document.createElement("p");range.surroundContents(p);range.selectNodeContents(p);range.insertNode(document.createElement("br")); //chromesel.collapse(p, 0);(function clearBr() {var elems = [].slice.call($(".J__wcEditor")[0].children);for (var i = 0, len = elems.length; i < len; i++) {var el = elems[i];if (el.tagName.toLowerCase() == "br") {$(".J__wcEditor")[0].removeChild(el);}}elems.length = 0;})();}}, 10);
}// 定义最后光标位置
var _lastRange = null, _sel = window.getSelection && window.getSelection();
var _rng = {getRange: function () {if (_sel && _sel.rangeCount > 0) {return _sel.getRangeAt(0);}},addRange: function () {if (_lastRange) {_sel.removeAllRanges();_sel.addRange(_lastRange);}}
}// 格式化编辑器包含标签
$("body").on("click", ".J__wcEditor", function(){$(".wc__choose-panel").hide();_lastRange = _rng.getRange();
});
$("body").on("focus", ".J__wcEditor", function(){surrounds();_lastRange = _rng.getRange();
});
$("body").on("input", ".J__wcEditor", function(){surrounds();_lastRange = _rng.getRange();
});

react仿微信web版聊天室|仿微信客户端react版相关推荐

  1. vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

    一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室- ...

  2. php++仿网页版微信,vue+web端仿微信网页版聊天室功能

    一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室- ...

  3. IM即时通信多房间聊天室仿微信聊天(二)

    IM即时通信多房间聊天室仿微信聊天(服务器自定义处理客户端消息) 在IM即时通信多房间聊天室仿微信聊天(一)中我们已经搭建了基本的通信架构,接下来重点就是如何在自己的后台接收并处理客户端用户的消息了 ...

  4. IM即时通信多房间聊天室仿微信聊天(四)

    聊天记录的保存和展示 IM即时通信多房间聊天室仿微信聊天(一) IM即时通信多房间聊天室仿微信聊天(二) IM即时通信多房间聊天室仿微信聊天(三) 聊天消息的保存我们直接在服务端接收到客户端发送的消息 ...

  5. 【Java课程设计】仿QQ多人聊天室(基于TCP协议与JavaSwing)附下载

    仿QQ多人聊天室 下载地址:链接:https://pan.baidu.com/s/1dLFjSxwTA4gL5lI0B4UGuQ  提取码:2qs0 有两个项目,分别是服务器chatterServer ...

  6. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述(样例3)...

    <基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc>由会员分享,可免费在线阅读全文,更多与<基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述& ...

  7. java web聊天室论文_基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc...

    基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc 还剩 52页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价 ...

  8. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述.doc...

    基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述 本科生毕业论文(设计) 题 目: 基于Java网页版聊天室的设计与实现 姓 名:学 院: 理学院 专 业: 信息与计算科学 班 级: 信 ...

  9. 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项目源码及数据库文件、

    下载地址:https://download.csdn.net/download/ouyangxiaobai123/22679732 项目介绍: 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项 ...

最新文章

  1. “一次性”小家电之死:互联网必是杀手
  2. 简单易用NLP框架Flair发布新版本!(附教程)
  3. 网络性能测试工具iperf详细使用图文教程【转载】
  4. 开启灯光就是近光吗_有用!科目三灯光模拟操作大全
  5. jp在java中无法编译_为什么我的JAVA程序无法编译呢?
  6. 获取linux samba的文件访问日志
  7. thinkphp5 return 返回空_杨丞琳演唱会意外踩空,从两层楼高的舞台掉落,李荣浩心疼发文...
  8. ITU-T Technical Paper: NP, QoS 和 QoE的框架以及它们的区别
  9. 11-linux基础八-正则表达式
  10. armv6、armv7、armv7s、arm64 与开发静态库(.a)
  11. NorthWind 数据库整体关系
  12. 通过PaddleOCR识别pdf数据
  13. .NET Reflector(.net反编译工具) v10.0.7.774 特别版(附破解步骤+注册机)
  14. bzoj 2144: 跳跳棋
  15. 源码阅读工具-understand
  16. PHP高级计算器的过程,PHP基于堆栈实现的高级计算器功能示例
  17. 腾讯视频url获取方法
  18. mi4a android tv,小米电视4A精简系统教程
  19. Java基础题2从入门到放弃的第五天
  20. 电脑连接手机热点,显示无法连接到这个网络

热门文章

  1. m基于效用函数的联合资源分配matlab仿真,对比PF,CUBP以及DUBP三种方法
  2. 操盘手常用洗盘手法揭秘
  3. 论文笔记:DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs
  4. 必备元器件知识2(开关面包板)
  5. MKS SERVO42C 闭环步进电机 使用说明(三)串口通讯
  6. 中国极紫外(EUV)光刻胶行业营销动态与应用前景预测报告2022-2027
  7. web前端开发面试题(九)
  8. (转)python爬虫实例——爬取智联招聘信息
  9. 创业圣经---讲透创业成功的秘籍
  10. 网络虚拟化技术要点及实践