Skip to content

Commit

Permalink
Merge pull request #1 from 9AMTech/reorganize-useEffect
Browse files Browse the repository at this point in the history
Reorganized Code
  • Loading branch information
9AMTech committed Sep 3, 2023
2 parents 9cb6a9e + 8b16c7a commit 6c39df4
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 47 deletions.
5 changes: 4 additions & 1 deletion src/Context.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import { createContext, SetStateAction, Dispatch } from 'react';
import { CartData } from './RouteSwitcher';
import { FakeStoreData } from './components/Layout/Layout';

interface ICartContext {
cart: CartData[],
setCart: Dispatch<SetStateAction<CartData[]>>,
}

export const ProductContext = createContext<FakeStoreData[]>([]);

export const CartContext = createContext<ICartContext>({
cart: [],
setCart: () => {},
setCart: () => { },
});
50 changes: 38 additions & 12 deletions src/RouteSwitcher.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { CartContext } from "./Context";
import { useState } from 'react';
import { CartContext, ProductContext } from "./Context";
import { useState, useEffect, createContext } from 'react';
import IndexPage from "./pages";
import ProductsPage from "./pages/products";
import ProductPage from "./pages/products/[id]";
import AboutPage from "./pages/about";
import CartPage from "./pages/cart";
import ScrollToTop from "./components/ScrollToTop";
import { FakeStoreData } from "./components/Layout/Layout";

export interface CartData {
id: number;
Expand All @@ -18,19 +19,44 @@ export interface CartData {
}
const RouteSwitch = () => {
const [cart, setCart] = useState<CartData[]>([]);
const [products, setProducts] = useState<FakeStoreData[]>([]);

useEffect(() => {
const uri = "https://fakestoreapi.com/products/";
let isCancelled = false;
fetch(uri)
.then((res) => res.json() as Promise<FakeStoreData[]>)
.then((json) => {
if (!isCancelled) {
const parsedProducts: FakeStoreData[] = [];
json.map((product) => {
if (product.category !== "electronics") {
parsedProducts.push(product);
}
}
);
setProducts(parsedProducts);
}
return () => {
isCancelled = true;
};
});
}, []);

return (
<CartContext.Provider value={{ cart, setCart }}>
<Router basename="/posh-landing/">
<ScrollToTop />
<Routes>
<Route path="/" element={<IndexPage />} />
<Route path="/products" element={<ProductsPage />} />
<Route path="/products/:id" element={<ProductPage />} />
<Route path="/about" element={<AboutPage />} />
<Route path="/cart" element={<CartPage />} />
</Routes>
</Router>
<ProductContext.Provider value={products}>
<Router basename="/posh-landing/">
<ScrollToTop />
<Routes>
<Route path="/" element={<IndexPage />} />
<Route path="/products" element={<ProductsPage />} />
<Route path="/products/:id" element={<ProductPage />} />
<Route path="/about" element={<AboutPage />} />
<Route path="/cart" element={<CartPage />} />
</Routes>
</Router>
</ProductContext.Provider>
</CartContext.Provider>

);
Expand Down
11 changes: 1 addition & 10 deletions src/main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,10 @@ import ReactDOM from 'react-dom/client'
import RouteSwitch from './RouteSwitcher';
import './index.css'

export interface CartData {
id: number;
name: string;
price: number;
quantity: number;
image: string;
}


ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(

<React.StrictMode>
<RouteSwitch/>
<RouteSwitch />
</React.StrictMode>,
)

28 changes: 4 additions & 24 deletions src/pages/products.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,14 @@
import React, { useState, useEffect } from "react";
import React, { useContext } from "react";
import Layout from "../components/Layout/Layout";
import Card from "../components/Product/Card";
import { formatPrice } from "../components/functions";
import { FakeStoreData } from "../components/Layout/Layout";
import { ProductContext } from "../Context";


const ProductsPage: React.FC = () => {
const [products, setProducts] = useState<FakeStoreData[]>([]);

useEffect(() => {
const uri = "https://fakestoreapi.com/products/";
let isCancelled = false;
fetch(uri)
.then((res) => res.json() as Promise<FakeStoreData[]>)
.then((json) => {
if (!isCancelled) {
const parsedProducts: FakeStoreData[] = [];
json.map((product) => {
if (product.category !== "electronics") {
parsedProducts.push(product);
}
}
);
setProducts(parsedProducts);
}
return () => {
isCancelled = true;
};
});
}, []);
const products = useContext(ProductContext);

return (
<Layout>
<section className="grid grid-cols-1 w-full max-w-sm gap-y-12 mx-auto my-24
Expand Down

0 comments on commit 6c39df4

Please sign in to comment.