react+react-router 4.0+redux 构建购物车实战项目
前言
前些日子抽空学习了下react,因为近期忙着找工作,没时间写博客,今天我们就来看看用react全家桶,构建一个项目把,可能我学的也不是特别好,但是经过各种查资料,总算是能够构建出一个像模像样的栗子了。
github地址:https://github.com/hua1995116/react-shopping
脚手架
generator-react-webpack
Installation
npm install -g yo
npm install -g generator-react-webpack
Setting up projects
# Create a new directory, and `cd` into it:
mkdir my-new-project && cd my-new-project# Run the generator
yo react-webpack
技术栈
react+react-router+redux+ webpack + ES6 + fetch+antd
项目结构
│ .babelrc
│ .editorconfig
│ .eslintrc
│ .gitignore
│ .yo-rc.json
│ karma.conf.js
│ package.json
│ prod.server.js
│ server.js
│ shop.json
│ tree.txt
│ webpack.config.js
│
├─cfg
│ base.js
│ defaults.js
│ dev.js
│ dist.js
│ test.js
│
├─dist
│
├─src
│ │ favicon.ico
│ │ index.html
│ │ index.js
│ │ routes.js
│ │
│ ├─actions
│ │ index.js
│ │ README.md
│ │
│ ├─api
│ │ shop.json
│ │
│ ├─components
│ │ Destination.js
│ │ Detail.js
│ │ Index.js
│ │ Main.js
│ │ Plan.js
│ │
│ ├─config
│ │ base.js
│ │ dev.js
│ │ dist.js
│ │ README.md
│ │ test.js
│ │
│ ├─constants
│ │ ActionTypes.js
│ │
│ ├─images
│ │
│ ├─reducers
│ │ cart.js
│ │ count.js
│ │ history.js
│ │ index.js
│ │
│ ├─sources
│ │
│ ├─stores
│ │
│ └─styles
│ App.css
│
└─test
目标功能
- [x] 商品浏览页面 – 完成
- [x] 商品详细页面– 完成
- [x] 购物车页面– 完成
- [x] 历史记录页面 – 完成
项目运行
注意:由于涉及大量的 ES6 等新属性,nodejs 必须是 6.0 以上版本 。
git clone https://github.com/hua1995116/react-shopping.git cd react-shoppingnpm installnpm run start //运行npm run dist //打包
说明
如果本项目对于你有帮助,请顺手进github点个star
该项目已经在windows 7和mac进行测试。
推荐一个vue2 的实战项目(仿网易云音乐) http://blog.csdn.net/blueblueskyhua/article/details/68156734
另外推荐一个 vue2 + vuex 的实战项目(实时聊天系统,有后台代码)。http://blog.csdn.net/blueblueskyhua/article/details/70807847
如果有什么更好的建议或者问题,请及时再下方评论留言。
效果演示
http://www.qiufengh.com:8082
核心代码说明
“react”: “^15.0.0”
原本的 react package 被拆分为 react 及 react-dom 两个 package
详细看官方api: https://facebook.github.io/react/“react-router”: “^4.1.1”
React Router V4 基于 Lerna 管理多个 Repository。在此代码库包括:
- react-router React Router 核心
- react-router-dom 用于 DOM 绑定的 React Router
- react-router-native 用于 React Native 的 React Router
- react-router-redux React Router 和 Redux 的集成
- react-router-config 静态路由配置帮助助手
api :https://reacttraining.com/react-router/web/guides/quick-start
src/index.js
import 'core-js/fn/object/assign'
import React from 'react'
import ReactDOM from 'react-dom' // 14.0版本后拆分成react和react-demo
import { createStore ,applyMiddleware } from 'redux'
import { Provider } from 'react-redux'
import Main from './components/Main'
import { createLogger } from 'redux-logger'
import thunk from 'redux-thunk'
import reducer from './reducers'
import 'antd/dist/antd.css'import './styles/App.css'
import { getAllProducts } from './actions'const middleware = [ thunk ] // redux-thunk解决异步回调
if (process.env.NODE_ENV !== 'production') {middleware.push(createLogger())
}const store = createStore(reducer,applyMiddleware(...middleware) // 中间件
)store.dispatch(getAllProducts()) //获取全部商品
// Render the main component into the dom
ReactDOM.render(<Provider store={ store } ><Main /></Provider>,document.getElementById('app')
)
主要定义了一些依赖。以及主入口模版文件Main.js
src/components/Main.js
import React from 'react'
import {BrowserRouter as Router,Route,Link
} from 'react-router-dom'
import {connect} from 'react-redux'
import Index from './index'
import Destination from './Destination'
import Plan from './Plan'
import Detail from './Detail'
import {Menu, Icon} from 'antd'
const SubMenu = Menu.SubMenuconst Basic = () => (<Router ><div className="clear container-main"><div className="fl"><Menustyle={{width: 240}}defaultSelectedKeys={['1']}defaultOpenKeys={['sub1']}mode="inline"><SubMenu key="sub1" title={<span><Icon type="mail"/><span>操作</span></span>}><Menu.Item key="1"><Link to="/">主页</Link></Menu.Item><Menu.Item key="2"><Link to="/about">购物车</Link></Menu.Item><Menu.Item key="3"><Link to="/topics">购买记录</Link></Menu.Item></SubMenu></Menu></div><Route exact path="/" component={Index}/><Route path="/about" component={Destination}/><Route path="/topics" component={Plan}/><Route path="/detail/:topicId" component={Detail} /></div></Router>
)export default connect()(Basic)
运用了函数式编程方式:
我们可以看看普通继承和函数式编程的差异,函数编程简洁了不少。也可以看到react-router在4.0版本后发生了一些变化。
效果图
转载于:https://www.cnblogs.com/qiufenghua/p/6904022.html
react+react-router 4.0+redux 构建购物车实战项目相关推荐
- (上)小程序从0快速入门到实战项目打造个性简历,让你轻松脱颖而出吸引面试官眼球(附源码)
前言 分享之前我们先来认识一下小程序,官方定义的微信小程序是一种新的开放能力,开发者可以快速地开发一个小程序.更是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体 ...
- 0基础C语言实战项目-贪吃蛇小游戏
大家好啊,如果有一样是编程0基础的大一本科生,相信大家现在都对自己学习了一段时间的程序设计课程还没有过实战经验: 最近也是考试刚完,持着练手的心态我编写了这样一个经典的小游戏-贪吃蛇: 由于是第一次发 ...
- 【React+TS】从零开始搭建react+typescript+router+redux+less+pxToVw自适应+sass+axios反向代理+别名@+Antd-mobile
一.通过create-react-app脚手架创建项目 npx create-react-app testproject --template typescript 在vscode中打开项目,可以看 ...
- 初探 React Router 4.0
React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(引入即用 ...
- 【React+TS】从零开始搭建react+typescript+router+redux+less+px2rem自适应+sass+axios反向代理+别名@+Antd-mobile
一.通过create-react-app脚手架创建项目 npx create-react-app testproject --template typescript 在vscode中打开项目,可以看到 ...
- react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)
react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...
- react实战项目_React实战之React+Redux实现一个天气预报小项目
引言 经过一段时间的React学习,React和Vue的开发确实有很大的不同,但是都是MVVM框架,因此上手没有很大的难度,这次用React+Redux开发一个天气预报小项目.源码地址:https:/ ...
- 如何使用React和Redux前端创建Rails项目
by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用React和Redux前端(加上Typescript!)创建Rails项目 (How to create a Rails ...
- REACT实战项目从0到1搭建(仅供参考)
目录 一.环境搭建 1.安装node.js 2.安装webpack 3.配置淘宝镜像(看个人需求) 4.安装create-react-app 5.创建项目 6.本地服务启动 二.项目框架结构 三.常用 ...
最新文章
- 英语写作学习笔录 task1 conclusion
- APP移动测试用例总结
- 【万里征程——Windows App开发】数据绑定——简单示例、更改通知、数据转换...
- 做网站买主机还是服务器,做网站买主机还是服务器
- 基于CXF的WebService的安全验证问题
- linux如何配置本地yum,Linux配置本地yum源配置方法
- steam删除本地的账号信息
- 皮克定理(计算多边形面积)
- 磁盘结构损坏且无法读取硬盘磁盘结构损坏且无法读取的找回方案
- vue制作导航栏html,Vue实现导航栏菜单
- 用于制作服装的天然纤维简介(动植物纤维)
- OARACLE——创建表空间、用户、权限、删除用户、导入、导出
- matlab编写二分法程序,我写的程序,想用Matlab二分法实现,望高手帮忙!
- 好久没来,深夜来一发
- 数字麦克风DMIC(上)
- 学会这些快准狠的Word技巧,你也能成为Word高手
- 30多种磁芯优缺点对比
- 使用Python操作音频文件,提取音频特征
- Centos7 添加大于2T磁盘,使用GPT硬盘格式和XFS文件系统
- 一份超详细的网站推广优化方案
热门文章
- Jolt大奖获奖图书
- 将一个字段的多个记录值合在一行
- [转]-Sublime Text 3最好的功能、插件和设置
- 《数据科学家修炼之道》笔记
- [JavaME]利用java.util.TimerTask来做Splash Screen的N种方法
- ubuntu-18.10 允许 root登录图形界面
- 你或许不知道SDP 但它能改变IaaS安全现状 - 2017.09.05
- 简书UI易用性缺陷:投稿按钮太小
- Sublime Text 教程
- Go发起Http请求及获取相关参数