์ ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ ์ด๊ณณ ์ ๊ณณ์์ ์ฌ์ฉ์ด ๋ง์ด ๋ ๊ฒ์ผ๋ก
์ปจํ
์คํธ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ฉด ์ฌ์ฉํ๊ธฐ ์ฝ๋ค.
import { createContext } from "react";
const UserContext = createContext(null);
export default UserContext;
App.jsx์์ ์ ์ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
// user context
import UserContext from "./contexts/UserContext";
return (
<UserContext.Provider value={user}>
<div className="app">
<Navbar user={user} cartCount={cart.length} />
<main>
<ToastContainer position="bottom-right" />
<Routing addToCart={addToCart} cart={cart} />
</main>
</div>
</UserContext.Provider>
);
CartPage.jsx๋ก ์ด๋ํด์ useContext๋ก user ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.
๊ทธ๋์ src ์ ๋ฐฑ์๋ ํ๋กํ ์ฃผ๋ก๋ฅผ ์ง์ ์
๋ ฅํ๋๋ฐ,
user๊ฐ ์์ ๊ฒฝ์ฐ์ ํ๋กํ์ ์ถ๋ ฅํ๊ฒํ๋ค.
import { useEffect, useState, useContext } from "react";
// userContext๋ก user๊ฐ์ฒด๋ฐ์
import UserContext from "../../contexts/UserContext";
const CartPage = ({ cart }) => {
const [subTotal, setSubTotal] = useState(0); //๋ฐฐ์ก๋น ์ ์ธ ํฉ๊ณ
const user = useContext(UserContext);
//์นดํธ ์์ ๋ ๋๋ง๋ค ํฉ๊ณ ๊ณ์ฐํ๊ธฐ
useEffect(() => {
let total = 0;
cart.forEach((item) => {
total += item.product.price * item.quantity;
});
setSubTotal(total);
}, [cart]);
return (
<section className="align_center cart_page">
<div className="align_center user_info">
<img
src={`http://localhost:5000/profile/${user?.profilePic}`}
alt="user profile"
/>
<div>
<p className="user_name">{user?.name}</p>
<p className="user_email">{user?.email}</p>
</div>
</div>
์ด๋ฒ์๋ CartContext๋ฅผ ๋ง๋ ๋ค.
import { createContext } from "react";
const CartContext = createContext(null);
export default CartContext;
App.jsx์์ ํ๋ก๋ฐ์ด๋๋ก ๊ฐ์ธ์ฃผ๊ณ cart๋ , addToCart๋ฅผ ๋ณด๋ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ผ์ฐํ
์์ ์ ๋ฌํด์คฌ๋ props๋ ์ง์ด๋ค.
return (
<UserContext.Provider value={user}>
<CartContext.Provider value={{ cart, addToCart }}>
<div className="app">
<Navbar user={user} cartCount={cart.length} />
<main>
<ToastContainer position="bottom-right" />
<Routing />
</main>
</div>
</CartContext.Provider>
</UserContext.Provider>
);
๋ผ์ฐํ
์์๋ CartPage์ SingleProductPage์ ์ ๋ฌํด์คฌ๋ props๋ฅผ ์ง์ด๋ค.
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/products" element={<ProductsPage />} />
<Route path="/product/:id" element={<SingleProductPage />} />
<Route path="/signup" element={<SignupPage />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/cart" element={<CartPage />} />
<Route path="/myorders" element={<MyOrderPage />} />
<Route path="/logout" element={<Logout />} />
</Routes>
CartPage.jsx
const CartPage = () => {
const [subTotal, setSubTotal] = useState(0); //๋ฐฐ์ก๋น ์ ์ธ ํฉ๊ณ
const user = useContext(UserContext);
const { cart } = useContext(CartContext);
์ด๋ฒ์๋ useContext๋ก CartContext๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ฉด๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก
SingleProductPage.jsx์๋ ์ ์ฉํ๋ค.
const SingleProductPage = () => {
const { addToCart } = useContext(CartContext);
๋ฐ๊ฟ๋ ์ ๋์ํ๋์ง ํ์ธํ๋ค.