亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

react+redux仿微信聊天界面

2019-11-19 11:18:08
字體:
來源:轉載
供稿:網友

一、項目概況

基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+react-photoswipe+swiper等技術混合開發的手機端仿微信界面聊天室――reactChatRoom,實現了聊天記錄下拉刷新、發送消息、表情(動圖),圖片、視頻預覽,打賞、紅包等功能。

二、技術棧MVVM框架:

react / react-dom狀態管理:redux / react-redux頁面路由:react-router-dom彈窗插件:wcPop打包工具:webpack 2.0環境配置:node.js + cnpm圖片預覽:react-photoswipe輪播滑動:swiper

◆package.json依賴安裝:

{ "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" }}

◆ 入口頁面index.js配置

/* * @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'// 引入jsimport './assets/js/fontSize'ReactDOM.render( <Provider store={store}>  <App /> </Provider>, document.getElementById('app'));

◆ 頁面App.js主模板

import React, { Component } from 'react';import {HashRouter as Router, Route, Switch, Redirect} from 'react-router-dom'import {connect} from 'react-redux'import $ from 'jquery'// 引入wcPop彈窗插件import { wcPop } from './assets/js/wcPop/wcPop'// 引入地址路由import routers from './router'// 導入頂部、底部tabbarimport HeaderBar from './components/header'import TabBar from './components/tabbar'class App extends Component { constructor(props){  super(props)  console.log('App主頁面參數:/n' + JSON.stringify(props, null, 2)) } render() {  let token = this.props.token  return (   <Router>    <div className="weChatIM__panel clearfix">     <div className="we__chatIM-wrapper flexbox flex__direction-column">      {/* 頂部 */}      <Switch>       <HeaderBar />      </Switch>      {/* 主頁面 */}      <div className="wcim__container flex1">       {/* 路由容器 */}       <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>      {/* 底部tabbar */}      <Switch>       <TabBar />      </Switch>     </div>    </div>   </Router>  ); }}const mapStateToProps = (state) =>{ return {  ...state.auth }}export default connect(mapStateToProps)(App);

◆ react登錄、注冊模塊 / 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 = this    this.state.tel = this.refs.tel.value    this.state.pwd = this.refs.pwd.value    this.state.vcode = this.refs.vcode.value    if (!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 : '/'      // 設置token      this.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.value    if (!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 = 60      this.state.disabled = true      this.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)

總結

以上所述是小編給大家介紹的react+redux仿微信聊天界面,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.xxxx精品| 日韩一区在线视频| 国产视频精品va久久久久久| 国产精品久久久久福利| 欧美性生交xxxxxdddd| 欧美一级成年大片在线观看| 国产精品久久久久久久久借妻| 91精品久久久久久久久久| 欧美老妇交乱视频| 欧美日韩亚洲激情| 欧美老肥婆性猛交视频| 国产亚洲一区二区精品| 欧美黄色片免费观看| 精品国产91乱高清在线观看| 欧美成人一区在线| 国产日韩欧美中文| 国产成人精品视| 久久精品国产欧美激情| 日本亚洲欧洲色α| 欧美精品久久久久久久免费观看| 欧美激情精品久久久久久蜜臀| 日韩在线视频免费观看高清中文| 亚洲欧美激情精品一区二区| 日韩在线播放一区| 久久精品视频在线观看| 国产精品一区二区三区在线播放| 国产精品欧美一区二区三区奶水| 日韩在线www| 亚洲精品国产美女| 在线亚洲国产精品网| 欧美自拍大量在线观看| 欧美午夜www高清视频| 欧美午夜视频在线观看| 热99久久精品| 久久影视电视剧免费网站| 成人xxxx视频| 91在线免费观看网站| 91在线精品播放| 91国偷自产一区二区三区的观看方式| 国产成人aa精品一区在线播放| 亚洲2020天天堂在线观看| 91精品综合久久久久久五月天| 日韩电影大全免费观看2023年上| 久久久欧美一区二区| 成人www视频在线观看| 久久69精品久久久久久国产越南| 亚洲精品电影在线| 91精品国产自产91精品| 国产在线久久久| 国产一区二区成人| 欧美性jizz18性欧美| 51久久精品夜色国产麻豆| 欧美裸体xxxx极品少妇软件| 国产精品久久久久久久av电影| 亚洲影院在线看| 国产精品69精品一区二区三区| 伊人精品在线观看| 亚洲一区二区三区乱码aⅴ| 91精品视频在线免费观看| 日本精品免费一区二区三区| 国产精品国产三级国产aⅴ浪潮| 久久福利视频网| 精品欧美国产一区二区三区| 亚洲视频电影图片偷拍一区| 成人av电影天堂| 亚洲xxxxx| 一本大道久久加勒比香蕉| 中文在线不卡视频| 久久综合色影院| 亚洲精品狠狠操| 欧美亚洲成人xxx| 国产一区二区三区视频| 91人人爽人人爽人人精88v| 欧美日在线观看| 亚洲激情视频在线播放| 亚洲在线一区二区| 日韩一区二区在线视频| 91免费人成网站在线观看18| 2020欧美日韩在线视频| 欧美激情精品久久久久久变态| 最好看的2019的中文字幕视频| 精品性高朝久久久久久久| 91久久精品久久国产性色也91| 日韩精品在线视频美女| 上原亚衣av一区二区三区| 欧美成人免费一级人片100| 成人午夜激情免费视频| 日韩精品中文字幕在线观看| 精品视频—区二区三区免费| 亚洲成人1234| 38少妇精品导航| 国产精品视频久久久| 九九精品视频在线观看| 91精品国产91久久久久久最新| 一区二区三区天堂av| 日本在线精品视频| 成人欧美在线视频| 成人av.网址在线网站| 91高清免费在线观看| 国内精品久久久久| 日韩在线观看免费| 色中色综合影院手机版在线观看| 亚洲精品一区二区三区不| 日韩成人在线视频观看| 国产日韩中文在线| 国产69精品99久久久久久宅男| 欧美日韩国产精品专区| 色yeye香蕉凹凸一区二区av| 久久精品青青大伊人av| www.日韩免费| 成人亚洲激情网| 国产69精品久久久久9999| 日韩欧美中文第一页| 亚洲偷欧美偷国内偷| 九九热这里只有精品免费看| 亚洲最大的网站| 欧美激情伊人电影| 亚洲一区中文字幕| 亚洲国产私拍精品国模在线观看| 亚洲视频在线免费观看| 久久影视三级福利片| 欧美与黑人午夜性猛交久久久| 日韩在线高清视频| 久久伊人91精品综合网站| 精品日本高清在线播放| 久久精品视频中文字幕| 日韩欧美综合在线视频| 国产精品久久久久aaaa九色| 国产成人精品久久久| 欧美视频不卡中文| 欧美韩国理论所午夜片917电影| 欧美成人午夜影院| 亚洲欧美国产另类| 亚洲石原莉奈一区二区在线观看| 亚洲午夜精品久久久久久久久久久久| 精品久久久久久中文字幕| 亚洲美女视频网| 欧美乱大交xxxxx| 精品国产鲁一鲁一区二区张丽| 日韩中文字幕在线视频| 国产亚洲精品久久| 日韩男女性生活视频| 久久综合伊人77777尤物| 日韩高清电影好看的电视剧电影| 伊人伊人伊人久久| 久久人人爽人人爽人人片av高请| 日韩欧美精品在线观看| 亚洲精品久久久久| 北条麻妃99精品青青久久| 国产伊人精品在线| 久久天天躁狠狠躁夜夜躁| 亚洲网站在线播放| www.美女亚洲精品| 欧美区在线播放| 国产国语videosex另类| 国产精品三级网站| 久久成人亚洲精品| 亚洲娇小xxxx欧美娇小| 久99九色视频在线观看| 51ⅴ精品国产91久久久久久| 中文字幕亚洲第一| 中文字幕精品影院| 亚洲美女福利视频网站| 日韩美女av在线免费观看|