Skip to content

Commit

Permalink
feat: 서버에 따라 렌더링이 달라지게 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
xodms0309 committed May 25, 2023
1 parent d957b06 commit f8f322c
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 29 deletions.
8 changes: 0 additions & 8 deletions src/components/Cart/CartItemList/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { useEffect } from 'react';
import * as S from './CartItemList.styles';
import CartItem from 'components/Cart/CartItem';
import Spinner from 'components/@common/Spinner';
import Modal from 'components/@common/Modal';
import { useCheckedItemIds } from '../hooks/useCheckedItems';
import { useModal } from 'hooks/useModal';
Expand All @@ -17,13 +16,6 @@ const CartItemList = () => {
checkAllItems();
}, []);

const loading = (
<S.Loading>
<Spinner />
<S.LoadingText>장바구니를 불러오는 중입니다...</S.LoadingText>
</S.Loading>
);

const fetchedCartList =
cartList.length === 0 ? (
<S.EmptyList>장바구니가 비어있습니다.</S.EmptyList>
Expand Down
20 changes: 4 additions & 16 deletions src/components/Product/ProductItemList/index.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,16 @@
import * as S from './ProductItemList.styles';
import ProductItem from 'components/Product/ProductItem';
import LoadingSkeleton from 'components/Product/ProductItem/LoadingSkeleton';
import { useGet } from 'hooks/useGet';
import { Product } from 'types';
import { getProductList } from 'api/requests';
import { productListSelector } from 'recoil/productList';
import { useRecoilValue } from 'recoil';

const ProductItemList = () => {
const { data, isLoading } = useGet<Product[]>(getProductList);

const loading = Array.from({ length: 16 }).map((_, idx) => (
<LoadingSkeleton key={idx} />
));
const data = useRecoilValue(productListSelector);

const fetchedProductList =
data &&
data.map((product) => <ProductItem key={product.id} product={product} />);

return (
<>
<S.ProductListWrapper>
{isLoading ? loading : fetchedProductList}
</S.ProductListWrapper>
</>
);
return <S.ProductListWrapper>{fetchedProductList}</S.ProductListWrapper>;
};

export default ProductItemList;
5 changes: 4 additions & 1 deletion src/pages/CartList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ import { styled } from 'styled-components';
import ContentLayout from 'components/@common/ContentLayout';
import PaymentDetail from 'components/Cart/PaymentDetail';
import CartItemList from 'components/Cart/CartItemList';
import { Suspense } from 'react';

const CartList = () => {
return (
<ContentLayout>
<Title>🛒 장바구니 🛒</Title>
<Container>
<CartItemList />
<Suspense fallback={<div>loading...</div>}>
<CartItemList />
</Suspense>
<PaymentDetailWrapper>
<PaymentDetail />
</PaymentDetailWrapper>
Expand Down
7 changes: 4 additions & 3 deletions src/recoil/cartList.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { getCartList } from 'api/requests';
import { atom, selector } from 'recoil';
import { Cart } from 'types';
import { SERVERS } from 'utils/constants';
import { serverAtom } from './server';

export const cartListAtom = atom<Cart[]>({
key: 'cartList',
default: selector({
key: 'initialCartList',
get: async () => {
const data = await getCartList(SERVERS['여우']);
get: async ({ get }) => {
const server = get(serverAtom);
const data = await getCartList(server);
return data;
},
}),
Expand Down
16 changes: 16 additions & 0 deletions src/recoil/productList.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { getProductList } from 'api/requests';
import { atom, selector } from 'recoil';
import { Product } from 'types';
import { serverAtom } from './server';

export const productListSelector = atom<Product[]>({
key: 'productList',
default: selector({
key: 'initalProductList',
get: async ({ get }) => {
const server = get(serverAtom);
const data = await getProductList(server);
return data;
},
}),
});
7 changes: 6 additions & 1 deletion src/router/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Suspense } from 'react';
import { createBrowserRouter } from 'react-router-dom';
import ProductList from 'pages/ProductList';
import CartList from 'pages/CartList';
Expand All @@ -7,7 +8,11 @@ const router = createBrowserRouter(
[
{
path: '/',
element: <ProductList />,
element: (
<Suspense>
<ProductList />
</Suspense>
),
errorElement: <NotFound />,
},
{
Expand Down

0 comments on commit f8f322c

Please sign in to comment.