0

I am completely new in react js and this is my first project. I have used Reducer to push item in cart but I am getting data in console but not able to in cart.

StateReducer.js

export const initialState = {
    cart : ["react", "javascript"],
    user: null,
   
}



const reducer = (state = { basket : [] }, action) => {
    console.log(action);
    switch (action.type) {
        case "ADD_TO_CART":
            return {
              ...state,
              cart: [...state.cart, action.payload],
            };
            
          
        case 'Removing_from_cart':
            //logic to adding cart
            return { state }
            
                
        default:
            return state;
    }
}

export default reducer`



this items.js page where I used useStateValue
Items.js

import React from 'react'
import './product.css'
import { useStateValue } from '../../ContextProvider';

function Items({id, product_name, price, currency, thumb}) {

    const [{ }, dispatch] = useStateValue();

    const handleClick = () => {
        dispatch({
            type : 'ADD-TO-CART',
            payload : {
                id: id,
                product_name: product_name,
                price: price,
                currency: currency,
                thumb: thumb,
            }
        });
    };
  return (
    <>
      <div className='product_info'>
        <div className='card'>
            <h6>{product_name}</h6>
            <p className='product__price'>{price} <span>{currency}</span></p>

            <div>
            <img className='product_img' src={thumb}  alt='img'/>
        </div>
            <button type='button' className='product_button' onClick={handleClick} >Add to Cart</button>
        </div>
        </div>
    </>
    
  );
}

export default Items

Cart.js


import React from 'react'
import ShoppingCartIcon from '@mui/icons-material/ShoppingCart';
import { Link } from 'react-router-dom';
import Orders from './Orders';
import Languages from './Languages'
import './Cart.css'
import Account from './Account';
import { useStateValue } from '../../ContextProvider';


function Cart() {

const [{ cart }] = useStateValue();
console.log(cart);
  return (
    <div className='header__nav'>
  
     <Languages />
      <Account />
      <Orders />

       <Link to="/checkout" className="header__Link">
                <div className="header__cart">
                    <ShoppingCartIcon className="header__optionLineone" sx={{fontSize: 40}} />
                    <span className="header__optionLinetwo cart__count">{cart?.length}</span>
                </div>
                
            </Link>

      
            
    </div>
  )
}

export default Cart


console:




prepareInjection.js:535 [Violation] 'message' handler took 299ms
Cart.js:14 
(2) ['react', 'javascript']
VM3147 installHook.js:1608 
(2) ['react', 'javascript']
0
: 
"react"
1
: 
"javascript"
length
: 
2
[[Prototype]]
: 
Array(0)
scheduler.development.js:517 [Violation] 'message' handler took 221ms
StateReducer.js:10 
{type: 'ADD-TO-CART', payload: {…}}
react_devtools_backend.js:2709 
{type: 'ADD-TO-CART', payload: {…}}
StateReducer.js:10 
{type: 'ADD-TO-CART', payload: {…}}
react_devtools_backend.js:2709 
{type: 'ADD-TO-CART', payload: {…}}
StateReducer.js:10 
{type: 'ADD-TO-CART', payload: {…}}
react_devtools_backend.js:2709 
{type: 'ADD-TO-CART', payload: {…}}
payload
: 
{id: 5, product_name: 'Hammer Bash 2.0 Over The Ear Wireless Bluetooth He…rs Playtime, Workout/Travel, Bluetooth 5.0 (Grey)', price: '1999', currency: '₹', thumb: 'https://m.media-amazon.com/images/I/71BrtUGEvvL._SL1500_.jpg'}
type
: 
"ADD-TO-CART"
[[Prototype]]
: 
Object
switch (action.type) {
        case 'Add_to_Cart':
            //logic to adding cart
            // return { 
            //     ...state,
            //     basket: [...state.basket, action.payload],
            //  };
            
             return {
                ...state,
                cart: state.cart.map(cart =>
                    cart.payload=== action.payload? {...cart, selected: true} : cart,
                ),
              };
    
        case 'Removing_from_cart':
            //logic to adding cart
            return { state }
            
                
        default:
            return state;
    }
}`

I have tried this also but again same output. not able to push item in cart. Anybody please suggest solution. Thank you so much in advanced.

  • It’s a typo — you are logging ADD-TO-CART with hyphens, but the reducer is looking for ADD_TO_CART with underscores. – Linda Paiste Mar 15 '23 at 16:19

0 Answers0