博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redux
阅读量:7115 次
发布时间:2019-06-28

本文共 3992 字,大约阅读时间需要 13 分钟。

redux学习

流程

store分发(dispatch)> action(有type表示将要执行的动作)> reducer纯函数,接受先前的state和action,返回新的state(switch(action.type)case根据type类型执行不同操作,进而改变state)

action

cart-actions.js

export const ADD_TO_CART = 'ADD_TO_CART';export const UPDATE_CART = 'UPDATE_CART';export const DELETE_FROM_CART = 'DELETE_FROM_CART';export function addToCart(product,quantity,unitCost){    return{        type:ADD_TO_CART,        payload:{            product,            quantity,            unitCost        }    }}export function updateCart(product,quantity,unitCost){    return{        type:UPDATE_CART,        payload:{            product,            quantity,            unitCost        }    }}export function deleteFromCart(product){    return{        type:DELETE_FROM_CART,        payload:{            product        }    }}

reducer

  • 不要修改state
  • 在default的情况下返回旧的state

clipboard.png

cart-reducer.js

import { ADD_TO_CART,UPDATE_CART,DELETE_FROM_CART } from '../actions/cart-actions'const initialState = {    cart:[        {            product:'bread 700g',            quantity:2,            unitCost:90        },        {            product:'milk 500ml',            quantity:1,            unitCost:47        }    ]}export default function(state=initialState,action){    switch(action.type){        case ADD_TO_CART:{            return{                ...state,                cart:[...state.cart,action.payload]            }        }        case UPDATE_CART:{            return{                ...state,                cart:state.cart.map(item =>                     item.product === action.payload.product?action.payload:item                )            }        }        case DELETE_FROM_CART:{            return{                ...state,                cart:state.cart.filter(item =>                    item.product !== action.payload.product                )            }        }        default:            return state;    }}

products-reducer.js

export default function(state=[],action){    return state}

index.js

import { combineReducers } from 'redux';import productsReducer from './products-reducer';import cartReducer from './cart-reducer';const allReducers = {    products:productsReducer,    shoppingCart:cartReducer}const rootReducer = combineReducers(allReducers);export default rootReducer

store.js

clipboard.png

clipboard.png

store.js

import { createStore } from 'redux'import rootReducer from './reducers'let store = createStore(rootReducer)export default store

index.js

import store from './store.js'import { addToCart,updateCart,deleteFromCart } from './actions/cart-actions'//const productsReducer = function(state=[],action){//    return state//}////const initialState = {//    cart:[//        {//            product:'bread 700g',//            quantity:2,//            unitCost:90//        },//        {//            product:'milk 500ml',//            quantity:1,//            unitCost:47//        }//    ]//}////const ADD_TO_CART = 'ADD_TO_CART';reducer//const cartReducer = function(state=initialState,action){//    switch(action.type){//        case ADD_TO_CART:{//            return{//                ...state,//                cart:[...state.cart,action.payload]//            }//        }//        default://            return state;//    }//    //}action//function addToCart(product,quantity,unitCost){//    return{//        type:ADD_TO_CART,//        payload:{//            product,//            quantity,//            unitCost//        }//    }//}////////const allReducers = {//    products:productsReducer,//    shoppingCart:cartReducer//}////const rootReducer = combineReducers(allReducers);////let store = createStore(rootReducer);console.log("initial state:",store.getState());let unsubscribe = store.subscribe(() =>    console.log(store.getState()));//ADD_TO_CARTstore.dispatch(addToCart('Coffee 500mg',1,250));store.dispatch(addToCart('Flour 1kg',2,110));store.dispatch(addToCart('Juice 2L',1,250));//UPDATE_CARTstore.dispatch(updateCart('Juice 2L',3,270));//DELETE_FROM_CARTstore.dispatch(deleteFromCart('Flour 1kg'));unsubscribe();

转载地址:http://dcwel.baihongyu.com/

你可能感兴趣的文章
经常被问到的面试题1
查看>>
PHP Warning: 的解决方法
查看>>
Opacity函数-transparentize()、 fade-out()函数
查看>>
产品生产成本核算中,生产订单差异计算逻辑及生产订单成本公式
查看>>
代码整洁之道-第5章-格式-读书笔记
查看>>
Siebel Performance for Script <1>
查看>>
【转载】SEO为什么要求网页设计师用DIV+CSS布局网页?
查看>>
webstorm命令行无法使用node-gyp进行编译
查看>>
c#静态构造函数
查看>>
Spring依赖注入的三种方式
查看>>
可能博客园最后一篇随笔
查看>>
Linux Oracle 中文乱码解决
查看>>
POJ2151-Check the difficulty of problems
查看>>
定时提醒实现
查看>>
理解Java多态
查看>>
兔耳效应
查看>>
webpack基础配置
查看>>
初识python: while循环 猜年龄小游戏
查看>>
不要从战略、技术出发做产品——陆树燊
查看>>
Jmeter 使用断言
查看>>