DEVELOP
article thumbnail
[ React - 쇼핑몰 사이트 ] firebase와 연동하기
FRONTEND/React 2023. 7. 23. 01:41

firebase의 firestore를 db로 사용할 것이다. 파이어베이스 연동 server 디렉토리에서 파이어베이스 dependency를 설치한다. yarn add firebase ▼ server/firebase.js 파이어베이스의 튜토리얼을 따라 아래 내용이 포함되도록 파이어베이스 설정을 한다. 파이어베이스 쿼리 작성 상품 쿼리 작성 ▼ server/resolvers/product.ts createAt 기준으로 내림차순 정렬 startAt 옵션은 쿼리 결과의 시작 지점을 지정한다. unshift() : 배열 앞에 새로운 값을 추가하고 배열의 전체 개수를 리턴함 / shift() : 배열의 맨 앞 값을 삭제하고 삭제한 값을 리턴함 where 옵션은 쿼리를 필터링하는 데 사용된다. (특정 조건을 만족하는 ..

article thumbnail
[ React - 쇼핑몰 사이트 ] admin - CRUD(상품 추가 & 수정 & 삭제) & 장바구니 삭제 상품 처리
FRONTEND/React 2023. 7. 19. 03:04

상품을 관리할 수 있는 어드민 페이지를 만들 것이다. 어드민 api 작성 addProduct : 상품 추가 updateProduct : 상품 수정 deleteProduct : 상품 삭제 상품 삭제의 경우에는 실제 db에서는 삭제하지 않는 대신에 삭제한 상품임을 flag처리하기 위해서 해당 상품의 createdAt정보를 지울 것이다. schema 작성 Mutation의 schema를 정의한다. ▼ server/src/schema/products.ts extend type Mutation { addProduct( imageUrl: String! price: Int! title: String! description: String! ): Product! updateProduct( id: ID! imageUrl:..

article thumbnail
[ React - 쇼핑몰 사이트 ] 무한스크롤 적용하기 - useInfiniteQuery & InterSectionObserver
FRONTEND/React 2023. 7. 18. 02:45

기존에는 product 갯수가 20개였지만, 60개로 늘려서 product.json 파일을 수정한다. 60개의 상품을 4개의 페이지로 나눈다고 생각하면 id 1~15번인 15개의 상품을 먼저 보여주고, 커서가 끝까지 갔을 때 id가 16~30번인 15개의 상품을 보여주고 ... 하는 식으로 무한 스크롤로 페이지를 나눌 수 있다. 무한스크롤 적용하기 커서 Pagination 서버에서 cursor를 argument로 받아주어야 한다. 커서를 아이디 값으로 하면 그 값에 따라 상품이 변경되어 보이게 할 수 있다. ▼ server/src/schema/products.ts extend type Query { products(cursor: ID): [Product!] product(id: ID!): Product!..

article thumbnail
[ React - 쇼핑몰 사이트 ] json DB 생성 & resolver 연동 & 클라이언트에 DB 반영
FRONTEND/React 2023. 7. 16. 03:23

json DB 생성 dbController 작성 DBfield와 basePath, filenames를 정의한다. readDB와 writeDB를 정의한다. ▼ server/src/dbController.ts export enum DBfield { CART = "cart", PRODUCTS = "products", } const basePath = resolve(); const filenames = { [DBfield.CART]: resolve(basePath, "src/db/cart.json"), [DBfield.PRODUCTS]: resolve(basePath, "src/db/products.json"), }; export const readDB = (target: DBfield) => { try { r..

article thumbnail
[ React - 쇼핑몰 사이트 ] 클라이언트-서버 분리 & ApolloServer Schema, Resolver & Unexpected end of JSON input , Unknown file extension ".ts" 에러 해결
FRONTEND/React 2023. 7. 15. 03:05

클라이언트와 서버 분리 (모노레포) 모노레포 : 여러 개의 프로젝트를 단일 코드베이스 내에 저장하는 구조 현재까지 진행한 프로젝트 파일을 client와 server를 따로 두어 분리할 것이다. client workspace - 먼저, 현재 까지의 파일들을 모두 client 디렉토리에 넣는다. - package.json 파일의 name 속성을 client로 변경한다. - "name": "client", 루트 프로젝트 - 루트 프로젝트 경로에서 yarn init -y를 입력하고, package.json 파일이 생긴 것을 확인한다. - package.json에 아래를 추가한다. "private": true, "workspaces": [ "client", "server" ], "scripts": { "clien..

article thumbnail
[ React - 쇼핑몰 사이트 ] 상태관리(recoil) & Portals & ReactNode & modal
FRONTEND/React 2023. 7. 13. 03:03

장바구니 상태관리(recoil) 선택된 상품에 대한 상태관리를 하기 위해 checkedCartState를 recoil로 관리한다. ▼ src/recoils/cart.ts export const checkedCartState = atom({ key: "cartState", default: [], }); }); 결제창 연결하기 Pick 기존 타입에서 원하는 속성만 선택하여 새로운 타입을 생성하는 역할을 한다. Pick을 사용하면 기존 타입에서 필요한 일부 속성만 선택하여 새로운 타입을 만들 수 있다. Pick itemData 컴포넌트 분리하기 ▼ src/components/cart/itemData.tsx const ItemData = ({ imageUrl, title, price, }: Pick) => { ..

article thumbnail
[ React - 쇼핑몰 사이트 ] mutation (update & delete) & checkbox handling (forwarded Ref)
FRONTEND/React 2023. 7. 12. 02:32

장바구니 수량 업데이트 장바구니 수량 업데이트 쿼리문 작성 기존 ADD_CART 쿼리문과 비슷하나 amount가 추가된 것이다. ▼ src/graphql/cart.js export const UPDATE_CART = gql` mutation UPDATE_CART($id: string, $amount: number) { cart(id: $id, amount: $amount) { id imageUrl price title amount } } `; 업데이트 핸들러 함수 정의 업데이트를 하는데 cartData가 없는 것은 에러를 발생시킨다. 기존에서 amount만 전달된 값으로 바꿔주면 된다. ▼ src/mocks/handler.ts graphql.mutation(UPDATE_CART, (req, res, ct..

article thumbnail
[React - 쇼핑몰 사이트 ] msw mock data & qraphql 사용하기
FRONTEND/React 2023. 7. 11. 02:57

msw mock data로 서버처럼 구현하기 mock이란? : "Mock"은 테스트 또는 개발 중에 실제 데이터 또는 외부 서비스를 대신하여 사용되는 가짜 또는 모의 데이터 또는 객체를 의미 이는 실제 시스템과의 상호 작용을 시뮬레이션하거나 특정 상황을 재현하여 코드를 테스트하거나 개발하는 데 유용하다. => 백엔드에 데이터가 아직 없거나, 불러오지 못할 경우에 서버를 임시로 만드는 것은 어려우므로 mock 데이터를 사용한다. msw 설치하기 Mock Service Worker Seamless API mocking library for browser and Node. mswjs.io yarn add msw --dev yarn add graphql-tag yarn add graphql-requset gra..

article thumbnail
[React - 쇼핑몰 사이트] react-query & no query client 오류 해결 & scss로 스타일 적용 & 쿼리옵션 추가 & gnb 추가
FRONTEND/React 2023. 7. 9. 16:22

쇼핑몰 dummy data https://fakestoreapi.com 위 사이트에서 읽어올 것이다. Fake Store API Fake store rest api for your ecommerce or shopping website prototype fakestoreapi.com React-query 사용하기 Quick Start | TanStack Query Docs This example very briefly illustrates the 3 core concepts of React Query: Queries tanstack.com react-query 다운로드 yarn add react-query react-query dev-tool 사용 import { ReactQueryDevtools } fr..

article thumbnail
[React - 쇼핑몰 사이트 ] vite 프로젝트 생성 & vite-plugin-next-router 사용하기
FRONTEND/React 2023. 7. 9. 16:17

vite란? Vite는 Vue.js 팀에서 개발한 웹 개발 빌드 도구이다. Vite의 주요 목표는 개발 서버와 빌드 시스템을 최적화하여 더 빠른 개발 경험을 제공하는 것이다. Vite는 기존의 번들러(Bundler)와는 다른 접근 방식을 채택한다. 일반적으로 번들러는 개발자가 작성한 모든 코드를 하나의 번들로 묶어서 제공하는 반면, Vite는 개별 파일 단위로 빌드하여 개발 서버에서 동적으로 제공한다. 이를 통해 초기 로딩 시간을 줄이고 개발 과정에서의 빠른 수정 및 반영을 가능하게 한다. Vite는 Vue.js를 위한 공식적인 개발 도구로서, Vue.js 애플리케이션 개발을 위한 편리한 기능과 통합을 제공하나, Vite는 단순히 Vue.js를 위한 도구로 제한되지 않고, 다른 프레임워크(React, ..