将“从购物车删除”操作添加到我的redux商店

时间:2017-08-06 19:45:57

标签: javascript html reactjs redux

我一直在尝试在我的redux设置中添加'从购物车删除'操作。到目前为止,我可以将项目添加到我在store中设置的白名单中,但我不确定如何从购物车中删除项目。这是我的store

import { createStore, applyMiddleware, compose } from 'redux';
import { persistStore, autoRehydrate } from 'redux-persist';
import  reducer  from './reducers';
import thunkMiddleware from 'redux-thunk';
import {createLogger} from 'redux-logger';


const store = createStore(
  reducer,
  undefined,
  compose(
    applyMiddleware(createLogger(), thunkMiddleware),
    autoRehydrate()
  )
);

persistStore(store, {whitelist: ['cart']});

export default store; 

这些是我的reducers

import {ADD_CART} from './actions';
import { REHYDRATE } from 'redux-persist/constants';

export default Reducer;

var initialState = {
  cart:{},
  data: [],
  url: "/api/comments",
  pollInterval: 2000
};

function Reducer(state = initialState, action){
    switch(action.type){
        case REHYDRATE:
                if (action.payload && action.payload.cart) {
                    return { ...state, ...action.payload.cart };
                }
            return state;

            case ADD_CART:
                return {
                    ...state,
                    cart: [...state.cart, action.payload]
                }



            default:
                return state; 
    };
}

这些是我的actions

export const ADD_CART = 'ADD_CART';

export function addCart(item){
    return {
        type: ADD_CART,
        payload: item
    }
};

export function removeCart(item){
    return{
        type: REMOVE_CART,
        payload: item
    }
};

在我的Cart组件中,我想要从购物车按钮中删除,您可以在其中选择要删除的特定项目:

import React, { Component } from 'react';
import {addCart} from './Shop'; 
import { connect } from 'react-redux';

export class Cart extends Component {
    constructor(props) {
        super(props);
        this.state = {items: this.props.cart,cart: [],total: 0};
    }

    ...
    render() {
        return(
            <div className= "Webcart" id="Webcart">
                {this.countTotal()}
            </div>
        );
    }
}

const mapDispatchToProps = (dispatch) => {
    return {
        onCartAdd: (cart) => {
            dispatch(addCart(cart));
        },
    }
}

function mapStateToProps(state) {
  return { cart: state.cart };
}

export default connect(mapStateToProps, mapDispatchToProps)(Cart);

我希望能够从cart数组中选择一个特定项目并将其删除。我相信这应该通过action使用redux完成,因为我的数组已保存在store中。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您是对的,只需从您的组件发送header=1操作(您已定义):

removeCart

并通过在reducer中处理它来更新状态

const mapDispatchToProps = (dispatch) => {
    return {
        onCartRemove: (cart) => {
            dispatch(removeCart(cart));
        },
        onCartAdd: (cart) => {
            dispatch(addCart(cart));
        },
    }
}