user1897151
user1897151

Reputation: 503

redux concat array for adding to cart

I need to concat an array from my reducer after add to cart button is pressed.

I tried pushed, but it doesn't seem to work.

import { combineReducers } from 'redux';

import { DATA_AVAILABLE,
         ADD_TO_CART,
         GET_CART_DATA 
        } from "../actions/" //Import the actions types constant we defined in our actions

let dataState = { data: [], loading:true };
let cartState = { data: [] };


const dataReducer = (state = dataState, action) => {
    switch (action.type) {
        case DATA_AVAILABLE:
            state = Object.assign({}, state, { data: action.data, loading:false });
            return state;
        default:
            return state;
    }
};

const cartReducer = (state = cartState, action) => {
    switch (action.type) {
        case ADD_TO_CART:
            state = Object.assign({}, state, { data: [action.data]});
            //console.log("state data => "+state.data);
            return state;
        default:
            return state;
    }
};

// Combine all the reducers
const rootReducer = combineReducers({
    dataReducer,
    cartReducer,
    // ,[ANOTHER REDUCER], [ANOTHER REDUCER] ....
})

export default rootReducer;

During ADD_TO_CART event, the reducer is replacing all the data each time my add to cart button is clicked. Instead, I need to concat those items so I can show them into my cart list.

Upvotes: 0

Views: 241

Answers (1)

markerikson
markerikson

Reputation: 67479

Seems like you probably want:

case ADD_TO_CART:
    return Object.assign({}, state, {
        data : state.data.concat(action.data)
    });

If you have the Object Spread syntax available in your app setup (which is turned on by default if you're using Create-React-App), you can simplify that a bit to:

case ADD_TO_CART:
    return {...state, data : state.data.concat(action.data) }

Upvotes: 3

Related Questions