我可以创建多页,但是在每个购物页面中复制导航栏感觉是多余的,而且我希望当我单击添加到购物车(从购物页面)时,每个页面都可以从导航栏中共享一个购物车功能。
我可以做到这一点,但它变成了单页反应。
Menmain、Women、Kids 是导入到导航栏页面的购物页面。使用道具,我可以获得导航栏的功能,以在每个购物页面上启用购物车功能。但是通过这样做..我只得到一页。
简而言之,如何使我的导航栏相互链接并充当所有人的购物车……就像父母一样。
截至目前,这些代码在单页反应中..
Index.js
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import NavbarShop from "./NavbarShop";
import Home from "./Home";
import Menmain from './Components/MenShop/menmain'
import Women from './Components/WomenShop/Women'
import Kids from './Components/KidsShop/Kids'
import Footer from "./Footer";
ReactDOM.render(
<Router>
<NavbarShop/>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/menmain" element={<Menmain />} />
<Route path="/Women" element={<Women />} />
<Route path="/Kids" element={<Kids />} />
</Routes>
<Footer/>
</Router>,
document.getElementById("root")
);
NavbarShop.jsx
import "./App.css";
import Mainlogo from "./Components/Assets/urban-fit-logo.png"
import 'bootstrap/dist/css/bootstrap.min.css';
import { Navbar, Nav, Container} from 'react-bootstrap';
import Offcanvas from 'react-bootstrap/Offcanvas'
import Basket from './Components/Basket';
import { useState } from 'react';
import Menmain from './Components/MenShop/menmain'
import Data from './Components/Data/data';
import Data2 from './Components/Data/data2';
import Women from './Components/WomenShop/Women';
import Data3 from './Components/Data/data3';
import Kids from './Components/KidsShop/Kids';
import Home from "./Home";
export default function NavbarShop() {
const { product } = Data
const { Fproducts } = Data2;
const { Kproduct } = Data3;
const [ cartItems, setCartItems] = useState([]);
const countCartItems = cartItems.length
const onAdd = (product) => {
const exist = cartItems.find((x) => x.id === product.id);
if (exist) {
setCartItems(
cartItems.map((x) =>
x.id === product.id ? { ...exist, qty: exist.qty + 1 } : x
)
);
} else {
setCartItems([...cartItems, { ...product, qty: 1 }]);
}
};
const onRemove = (product) => {
const exist = cartItems.find((x) => x.id === product.id);
if (exist.qty === 1) {
setCartItems(cartItems.filter((x) => x.id !== product.id));
} else {
setCartItems(
cartItems.map((x) =>
x.id === product.id ? { ...exist, qty: exist.qty - 1 } : x
)
);
}
};
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
return (
<div className='app'>
<div className='navbar-container'>
<Navbar collapseOnSelect expand="lg" bg="white" text="black" fixed="top" className="navbar-bootstrap">
<Container>
<Navbar.Brand href="#home" className="navLogo">
<div>
<a href="/"><img src={Mainlogo} alt="main-logo" className='main-logo'></img></a>
</div>
</Navbar.Brand>
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
<Navbar.Collapse id="responsive-navbar-nav">
<Nav className="me-auto">
<Nav.Link href="/" className="navlink">Home</Nav.Link>
<Nav.Link href="Shopmen" className="navlink">Shop Men</Nav.Link>
<Nav.Link href="Shopwomen" className="navlink">Shop Women</Nav.Link>
<Nav.Link href="Shopkids" className="navlink">Shop Kids</Nav.Link>
</Nav>
<Nav>
<Nav.Link className="nav-a" onClick={handleShow} id="badge">
Cart{' '}
{countCartItems ? (
<p className="badge">{countCartItems}</p>
) : (
''
)}
</Nav.Link>
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
<Offcanvas show={show} onHide={handleClose} placement='end' className="cart-container">
<Offcanvas.Header closeButton className="cartHeader">
<Offcanvas.Title className="cartName">CART</Offcanvas.Title>
</Offcanvas.Header>
<Offcanvas.Body>
<Basket
cartItems={cartItems}
onAdd={onAdd}
onRemove={onRemove}
></Basket>
</Offcanvas.Body>
</Offcanvas>
</div>
<div className='men-clothing'>
<Home/>
<Menmain product= { product } onAdd={onAdd} onRemove={onRemove}></Menmain>
<Women product= { Fproducts } onAdd={onAdd} onRemove={onRemove}></Women>
<Kids product= { Kproduct } onAdd={onAdd} onRemove={onRemove}></Kids>
</div>
</div>
);
}