zoukankan      html  css  js  c++  java
  • 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,记录一下

  • 相关阅读:
    把Orchard部署到Windows Azure Web Sites
    使用Windows Live Writer 发布博客园博客
    使用Microsoft Word 2013 发布Blog到博客园
    Java栈的简单实现
    Java中的运算符
    Java简单双向链表实现 @version 1.0
    Java中的面向对象II
    认识和分析日志文件
    两数之和问题
    括号序列算法
  • 原文地址:https://www.cnblogs.com/samsara-yx/p/12530620.html
Copyright © 2011-2022 走看看