0

应用截图

我需要访问我当前的购物车状态,它只是已添加到购物车的产品列表,以便我检查 id 以计算重复产品的数量。我意识到我的问题之一是我已经用一个空数组初始化了 itemsInCart 但我不确定这里还能做什么,因为没有它就无法解构状态。

cartReducer.js

const itemsInCart = []
 
export const cartReducer = (state = itemsInCart, action) => {

const { type, payload } = action;
  
  switch (type) {
    case "ADD_TO_CART":
        
      return [
        ...state,
        {
            imgUrl: payload.imgUrl,
            name: payload.name,
            price: payload.price,
            quantity: payload.quantity
        },
      ];
    default:
  }
  return state;
};

产品.js

单击该按钮会调度“ADD_TO_CART”操作,将新产品添加到我们的购物车状态。

import React from 'react';
import {useDispatch} from 'react-redux';

const Product = ({imgUrl, name, price, id }) => {
    const dispatch = useDispatch()
    
    const addToCart = () => {
        
        dispatch({
            type: "ADD_TO_CART",
            payload: {
                imgUrl: imgUrl,
                name: name,
                price: price,
                id: id
            }
        })
        
    }
    return ( 
        <div
          key={id}
          style={{
            textAlign: "center",
            display: "flex",
            border: "1px solid",
            marginBottom: "2rem",
            flexDirection: 'column'
          }}
        >
          <img
            src={imgUrl}
            style={{ height: "5rem", width: "5rem" }}
            alt="The product"
          />
          <h3>{name}</h3>
          <p>${price}.00</p>
          {id}
          <button onClick={()=>addToCart()}>Add To Cart</button>
        </div>
     );
}
 
export default Product;

InCartList.js

在 CartContainer 中呈现我的购物车中的项目列表

import React from "react";
import { useSelector } from "react-redux";
import CartItem from "./CartItem";

const ProductList = () => {
  const allState = useSelector((state) => state.cart);
  const renderProducts = () => {
    return allState.map((product) => {
      return (
        <CartItem id={product.id} quantity={product.quantity}key={product.id} name={product.name} price={product.price}/>
      );
    });
  };
  return <>{renderProducts()}</>;
};

export default ProductList;
4

1 回答 1

0

你不应该在 reducer 中放置任何逻辑(reducer 应该只是纯函数)

您可以尝试在调度操作ADD_TO_CART之前获取您想要的状态

  1. 使用getStateToProps函数
  2. 使用在 App 组件中初始化时应该导出的商店(我猜)
export const store = configureAppStore(history);
于 2020-08-23T02:23:46.823 回答