码迷,mamicode.com
首页 > 其他好文 > 详细

React+Redux项目实战总结

时间:2017-12-18 18:49:37      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:seq   sed   decode   save   处理   目的   直接   query   技术栈   

本项目实战是简化版的大众点评wap版

技术栈

react + redux + react-router-dom
mock数据使用的是 koa + koa-router

项目源码:https://github.com/volcanoliuc/dianpingapp

项目结构

├── 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
│ └── ...
└── test

遇到的问题及解决方法

1.react-router-dom 4.0
路径跳转问题:
react-router-dom 4.0无法通过导入browserHistory进行跳转

解决方案一:
通过react-router-dom history进行跳转:this.props.history.push(‘/‘)

  • 配置在Route下的组件可以直接调用this.props.history
  • 未配置在Route下的组件需要用withRouter高阶组件把组件包裹起来

    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,所以这种方法慎用,具体实现自行搜索 - -#

2.node后端接收post请求参数
一、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请求的参数

let postData = await parsePostData( ctx )

二、使用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 全家桶开发模式。

React+Redux项目实战总结

标签:seq   sed   decode   save   处理   目的   直接   query   技术栈   

原文地址:http://www.cnblogs.com/voll/p/8057824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!