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项目搭建及示例的更多相关文章

  1. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

  2. 用react+redux+webpack搭建项目一些疑惑

    --save-dev开发用 例如:webpack --save开发和发布用 例如:react

  3. node.js+ react + redux 环境搭建

    1.安装node.js 2. yarn init: 初始化,主要包含以下条目 name: 项目名 version: 版本号 description: 项目简要描述 entry point: 文件入口, ...

  4. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  5. react + redux 完整的项目,同时写一下个人感悟

    先附上项目源码地址和原文章地址:https://github.com/bailicangd... 做React需要会什么? react的功能其实很单一,主要负责渲染的功能,现有的框架,比如angula ...

  6. React:redux+router4搭建应用骨架

    可能是短期内关于react的对后一篇笔记.假设读者对redux和router4有基本了解. 缘由: 现在网上很多关于react+redux的文章都是沿用传统的文件组织形式,即: |--componen ...

  7. react 创建项目 sass router redux

    ​ 创建项目第一步 基本搭建 在创建之前,需要有一个git 仓库,我们要把项目搭建到git 中 目录介绍 cd 到某个盘 mkdir workspace 创建workspace文件夹 cd works ...

  8. React+Redux开发实战项目【美团App】,没你想的那么难

    README.md 前言 开始学习React的时候,在网上找了一些文章,读了官网的一些文档,后来觉得React上手还是蛮简单的, 然后就在网上找了一个React实战的练手项目,个人学完之后觉得这个项目 ...

  9. 用yeoman搭建react画廊项目笔记

    1.安装yeoman   npm install yo -g yo --version //检测 yeoman版本,成功显示版本号,则安装成功 2.到yeoman官网 http://yeoman.io ...

随机推荐

  1. Linux 网络栈 转载

    此文章  来自      http://arthurchiao.art/blog/tuning-stack-rx-zh/ [译] Linux 网络栈监控和调优:接收数据(2016) Published ...

  2. HotSpot类模型之InstanceKlass

    上一篇 HotSpot源码分析之类模型 介绍了类模型的基础类Klass的重要属性及方法,这一篇介绍一下InstanceKlass及InstanceKlass的子类. 1.InstanceKlass类 ...

  3. 如何使用GitHub创建Maven私有仓库

    [Github上创建仓库] 首先,在GitHub上创建自己的仓库(mvn-repo): [配置本地setting文件] 找到本地的maven settings文件,配置server: 有两种选择,可以 ...

  4. Android10_原理机制系列_Binder机制

    前言 Binder 从java到c++到kernel,涉及的内容很多,很难在一篇文章中说清楚.这篇主要是自我记录,方便后续查询并拆分总结的. 因为涉及的的确非常多,不能面面俱到,所以可能一些地方感觉比 ...

  5. Redis的一些攻击手法整理

    Redis基础 1 Redis基础 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开 ...

  6. CTF-流量分析笔记

    ---恢复内容开始--- 前言 做流量分析很长时间了但是一直没有系统的去总结过这类题目的做法和思路以及wireshark的使用方法,这次做题的时候突然发现了一个总结的特别好的博客,因此想趁机做个笔记总 ...

  7. ServerLess之云函数实践-天气API

    关注我的个人博客,发掘更多的内容 ServerLess之云函数实践-天气API 前言 云计算是大势所趋 Serverless 架构即"⽆服务器"架构,它是一种全新的架构方式,是云计 ...

  8. python中eval()和json.loads的区别

    一.最近在写接口测试脚本时,发现当读取Excel用例时,有时候要用eval,有时候又要用json.loads,不知道区别,只能换一下就可以用了,不知道其中的原理,特地百度了下.于是就记录了下,以便后续 ...

  9. httpservlet类中两个service方法

    在浏览器访问html页面时,当数据提交给servlet时发生了什么,这是我们需要了解的. 1.我们需要了解一下servlet的继承体系. servlet接口 ------->GenericSer ...

  10. mysql undo+redo+binlog

    rt 数据库事务开始之前,会将要修改的记录存放到UNdo日志里,当事务回滚时或数据库崩溃时,可以利用undo日志撤销未提交事务对数据库产生的影响. 逻辑日志,记录一个过程,提交后不会删除.delete ...