React. Как осуществить добавление товара в корзину?
Нужно реализовать на реактe добавление карточек товаров в корзину и в корзине осуществить подсчет общей суммы и функцию удаления товаров из нее при необходимости.
Пока не совсем понимаю, как это можно осуществить с помощью функционального подхода и Гугл мне к сожалению ничего толкового не выдал. Поэтому буду рада, если кто-нибудь сможет помочь.
Вот мой код:
App.js:
import './App.css';
import Products from './Pages/Products'
import Basket from './Pages/Basket'
import NotFound from './Pages/NotFound'
function App() {
return (
<>
<div className = "products">
<Products />
</div>
<div className = "basket">
<Basket />
</div></>
);
}
export default App;
Products.js
import Card from '../components/elements/card.js';
import { products } from '../products';
import './Products.css'
import React, { useState } from 'react';
//импорт React router DOM
import { Link } from 'react-router-dom';
import Basket from './Basket';
//Функциональный компанент Products
function Products () {
//хук для подсчета суммы цен
const [productsSum, setProductsSum]=useState(0);
//хук для подсчета количества добавленных товаров
const [countsSum, setCountsSum]=useState(0);
//функция
const addProduct = (price) => {
setProductsSum(productsSum => productsSum + parseInt(price));
setCountsSum(countsSum => countsSum + 1);
}
const [addCard, setAddCard]=useState([])
useEffect (()=>{
fetch('{products}')
.then(response => response.json())
.then(data => setAddCard(data))
}, [])
return (
<main className = "main">
<div className = "container">
<header className = "header">
<h1>наша продукция</h1>
<div className = "basketArea">
<div calssName = "total">
{countsSum} товара на сумму {productsSum} ₽</div>
<Link to="./Basket" className = "link"><img src= "/Group 71.png"></img></Link>
</div>
</header>
<div className = "menu">
{products.map(key => {
const {url, title, description, price, weight} = key;
return(
<Card
url={url}
title = {title}
description={description}
price={price}
weight={weight}
handleClick = {() => addProduct(price)}
/>
)
})}
</div>
</div>
</main>
);
}
export default Products;
Basket.js:
import {products} from '../products';
import './Basket.css'
import CardBasket from '../components/elements/card-basket.js'
//import './Products.css'
import Products from './Products';
import { Link } from 'react-router-dom';
function Basket () {
return (
<main className = "main-basket">
<div className = "container-basket">
<header className = "header-basket">
<Link to="./Products" className = "header-basket__returnLink">
<img src = "./Group 64.png"></img> </Link>
<h1>Корзина с выбранными товарами</h1>
</header>
<div className = "menu-basket">
{products.map(key => {
const {url, title, description, price, weight} = key;
return(
<CardBasket
url={url}
title = {title}
description={description}
price={price}
weight={weight} />
)
})}
</div>
<div className = "line"></div>
<footer className = "footer-basket">
<h2 className = "footer-basket__header">Заказ на сумму: {} </h2>
<button className = "footer-basket__btn">Оформить заказ</button>
</footer>
</div>
</main>
);
}
export default Basket;
card.js:
import './card.css';
function Card({url, title, description, price, weight, handleClick}) {
return (
<div className = "card">
<img className = "card__preview" src={url} alt = "" />
<h2 className = "card__title">{title}</h2>
<p className = "card__description">{description}</p>
<div className = "card__price">
{price} Р/ {weight}
<button className = "card__card-add-btn" onClick={handleClick}>
+
</button>
</div>
</div>
);
}
export default Card;
card-basket.js:
function BCard({url, title, price, weight}) {
return (
<div className = "bcard">
<img className = "bcard__preview" src={url} alt = "" />
<h2 className = "bcard__title">{title}</h2>
<div className = "bcard__price">
{price} Р
<button className = "bcard__add">
+
</button>
</div>
</div>
);
}
export default BCard;