react+redux项目搭建及示例
React + Redux示例,实现商品增删改
目录结构

1.项目搭建
1.1 使用create-react-app react_redux创建项目
1.2 安装使用redux需要的依赖 npm install redux react-redux redux-devtools
2.添加一些文件夹
2.1创建储存常量的文件夹添加cart.js
export const ADD_CART = "ADD_CART"
export const UPDATE_CART = 'UPDATE_CART';
export const DELETE_FROM_CART = 'DELETE_FROM_CART';
2.2创建action文件夹添加cart.js
import { ADD_CART, UPDATE_CART, DELETE_FROM_CART } from '../contants/cart'
export const addCart = function (product, quantity, unitCost) {
return {
type: ADD_CART,
payload: { product, quantity, unitCost }
}
}
export const updateCart = function (product, quantity, unitCost) {
return {
type: UPDATE_CART,
payload: { product, quantity, unitCost }
}
}
export const deleteFromCart = function (product) {
return {
type: DELETE_FROM_CART,
payload: { product }
}
}
2.3创建reducers文件夹
2.3.1 cart.js
import { ADD_CART, UPDATE_CART, DELETE_FROM_CART } from '../contants/cart'
const initialState = {
shops: [
{
product: '面包',
quantity: 2,
unitCost: 90
},
{
product: '牛奶',
quantity: 1,
unitCost: 47
}
]
}
const cartReducer = function (state = initialState, action) {
switch (action.type) {
case ADD_CART: {
return {
...state,
shops: [...state.shops, action.payload]
}
}
case UPDATE_CART: {
return {
...state,
shops: state.shops.map(item => {
item = item.product === action.payload.product ? action.payload : item
return item
})
}
}
case DELETE_FROM_CART: {
return {
...state,
shops: state.shops.filter(item => item.product !== action.payload.product)
}
}
default:
return state
}
}
export default cartReducer
2.3.2productsReducer.js
const productsReducer = function (state = [], action) {
return state
}
export default productsReducer
2.3.3index.js
import { combineReducers } from 'redux'
import cartReducer from './cart'
import productsReducer from './productsReducer'
const allReducers = {
cart: cartReducer,
products: productsReducer
}
const rootReducer = combineReducers(allReducers)//合并reducer
export default rootReducer
2.4创建store
import { createStore } from 'redux'
import rootReducers from '../reducers'
import { composeWithDevTools } from 'redux-devtools-extension';
// composeWithDevTools 在控制台可以查看数据
let store = createStore(rootReducers, composeWithDevTools())
console.log("initial state: ", store.getState());
export default store;
3.修改src下index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import store from './store/index'
import { Provider } from 'react-redux'
ReactDOM.render(<Provider store={store}>
<App />
</Provider>, document.getElementById('root'));
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
4.修改App.js
import React, { Component } from 'react';
import { connect } from 'react-redux'
import './App.css';
import * as cartActions from './actions/cart'
class App extends Component {
constructor(props) {
super(props)
}
render() {
let { shops } = this.props.cart;
return (
<div className="App">
<ul>
{shops.map((s, index) => {
return <li key={index}>{s.product}===>{s.quantity}===>{s.unitCost}</li>
})}
</ul>
<hr />
<button onClick={() => this.props.addCart()} > 增加商品</button>
<button onClick={() => this.props.updateCart()} > 修改商品</button>
<button onClick={() => this.props.deleteCart()} > 删除商品</button>
</div>
)
}
}
function getState(state) {
return {
cart: state.cart
}
}
function getDispatch(dispatch) {
return {
addCart: () => dispatch(cartActions.addCart("鱼香肉丝", 1, 20)),
updateCart: () => dispatch(cartActions.updateCart("鱼香肉丝", 2, 50)),
deleteCart: () => dispatch(cartActions.deleteFromCart("鱼香肉丝"))
}
}
export default connect(getState, getDispatch)(App);
初次使用redux做的小demo,记录一下
react+redux项目搭建及示例的更多相关文章
- Immutable.js 以及在 react+redux 项目中的实践
来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...
- 用react+redux+webpack搭建项目一些疑惑
--save-dev开发用 例如:webpack --save开发和发布用 例如:react
- node.js+ react + redux 环境搭建
1.安装node.js 2. yarn init: 初始化,主要包含以下条目 name: 项目名 version: 版本号 description: 项目简要描述 entry point: 文件入口, ...
- React项目搭建与部署
React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...
- react + redux 完整的项目,同时写一下个人感悟
先附上项目源码地址和原文章地址:https://github.com/bailicangd... 做React需要会什么? react的功能其实很单一,主要负责渲染的功能,现有的框架,比如angula ...
- React:redux+router4搭建应用骨架
可能是短期内关于react的对后一篇笔记.假设读者对redux和router4有基本了解. 缘由: 现在网上很多关于react+redux的文章都是沿用传统的文件组织形式,即: |--componen ...
- react 创建项目 sass router redux
创建项目第一步 基本搭建 在创建之前,需要有一个git 仓库,我们要把项目搭建到git 中 目录介绍 cd 到某个盘 mkdir workspace 创建workspace文件夹 cd works ...
- React+Redux开发实战项目【美团App】,没你想的那么难
README.md 前言 开始学习React的时候,在网上找了一些文章,读了官网的一些文档,后来觉得React上手还是蛮简单的, 然后就在网上找了一个React实战的练手项目,个人学完之后觉得这个项目 ...
- 用yeoman搭建react画廊项目笔记
1.安装yeoman npm install yo -g yo --version //检测 yeoman版本,成功显示版本号,则安装成功 2.到yeoman官网 http://yeoman.io ...
随机推荐
- 前端动画框架GSAP框架随笔
gsap是目前非常流行的前端动画框架,可以非常轻松构造出复杂的动画效果,这里仅对我实际使用中的一些例子进行总结 官网 示例 文章种所使用代码的在线示例 基础用法 // 声明一个滚动控制器 let ct ...
- strace 使用文档
strace -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filenam ...
- kafak ack应答机制
ack 应答机制 对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失, 所以没必要等 ISR 中的 follower 全部接收成功. 所以 Kafka 为用户提供了三种可靠性级 ...
- AHB SRAM控制器设计
- 五:key关键字 string字符串 list列表 set集合 Zset有序集合
key 1.keys 命令用于查找所有符合给定模式 pattern 的 key . keys * 查找所有的key返回一个列表 2.EXISTS xxx 检查是否有指定名字为xxx的key 有就返回 ...
- oracle 相关笔记
1.查询语句执行顺序 from->where->[group by ]-> select ->distinct->count(某一列) 2.用命令执行存储过程用 exec ...
- 信息论-Turbo码学习
1.Turbo码: 信道编码的初期:分组码实现编码,缺点有二:只有当码字全部接收才可以开始译码,需要精确的帧同步时延大,增益损失多 解决方案:卷积码:充分利用前一时刻和后一时刻的码组,延时小,缺点:计 ...
- ERP出入库进阶操作与子流程--开源软件诞生28
赤龙ERP出入库进阶讲解--第28篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redr ...
- webug第四关:告诉你了flang是5位数
第四关:告诉你了flang是5位数 开始看到有点懵 于是不要脸的看源码 burp跑弱口令
- 思维导图VS金字塔原理
作为常识,思维导图制作的核心元素是关键词,而金字塔原理制作的核心元素则是拓展的概要句子,这两种方式是当今人们常用的思维工具,本文对其做了对比,希望对你的选择有所帮助. 金字塔原理结构:从上到下三角形结 ...