本项目实战是简化版的大众点评wap版html
react + redux + react-router-dom
mock数据使用的是 koa + koa-routernode
项目源码:https://github.com/volcanoliuc/dianpingappreact
├── app #项目主目录
│ ├── index.jsx # 项目的入口index
│ ├── index.tmpl.html # html生成模板
│ ├── actions # redux action
│ ├── component # 组件文件夹(木偶组件)
│ ├── config
│ ├── contianer # 组件文件夹(智能组件)
│ │ ├── index.jsx
│ │ ├── 404.jsx # 404页面
│ │ ├── City # 选择城市
│ │ ├── Detail # 商户详情页
│ │ ├── Home # 首页
│ │ ├── Login # 登陆页
│ │ ├── Search # 搜索结果页
│ │ └── User # 用户中心页
│ ├── contant # actionType
│ ├── fetch # 请求服务API
│ ├── config
│ ├── reducers
│ ├── router #路由配置
│ ├── static # 静态文件
│ ├── store
│ └── util # 工具方法
├── docs
├── mock # mock数据
│ ├── server.js
│ └── ...
└── testgit
1.react-router-dom 4.0
路径跳转问题:
react-router-dom 4.0没法经过导入browserHistory进行跳转github
解决方案一:
经过react-router-dom history进行跳转:this.props.history.push('/')npm
import {withRouter} from 'react-router-dom' ... class App extends React.Component{ handleClick(){ this.props.history.push('/') } ... } export default withRouter(App)
解决方法二:
react-router v4 在 Router 组件中经过Context暴露了一个router对象,能够在子组件中使用Context获取router对象,由于react不推荐使用Context,因此这种方法慎用,具体实现自行搜索 - -#redux
2.node后端接收post请求参数
1、koa后端没法直接读取post传过去的参数因此须要定义一个方法去解析post参数。后端
//解析传入的post参数 const parsePostData = ( ctx ) => { return new Promise((resolve, reject) => { try { let postdata = ""; ctx.req.addListener('data', (data) => { postdata += data }) ctx.req.addListener("end",function(){ let parseData = parseQueryStr( postdata ) resolve( parseData ) }) } catch ( err ) { reject(err) } }) } //把传入的参数解析成对象 const parseQueryStr = ( queryStr ) => { let queryData = {} let queryStrList = queryStr.split('&') console.log( queryStrList ) for ( let [ index, queryStr ] of queryStrList.entries() ) { let itemList = queryStr.split('=') queryData[ itemList[0] ] = decodeURIComponent(itemList[1]) } return queryData }
只须要把koa ctx 直接传入parsePostData就能够获得一个post请求的参数react-router
let postData = await parsePostData( ctx )app
2、使用koa-bodyparser中间件
对于POST请求的处理,koa-bodyparser中间件能够把koa2上下文的formData数据解析到ctx.request.body中
npm install --save koa-bodyparser@3 //安装 ... // 使用ctx.body解析中间件 app.use(bodyParser()) ... let postData = ctx.request.body
更多关于koa的学习资料能够参考Koa2进阶学习笔记
本次项目从零配置整个项目的结构,主要是让本身了从新理解了react + redux + react-router 全家桶开发模式。