5. 상품 관리
1. 상품 목록
🎯 상품 목록 상세보기, 추가하기, 수정하기, 삭제하기 구현
기본적인 fetch 작업에선 SWR을 사용
폼을 관리하는 부분은 React Hook Form 대신 usestore-ts를 사용해서 기존 코드와 비교해서 어색한 부분이 있을 수 있음
ProductListPage 생성
ProductListPage 생성기존의 페이지와 유사 주문 목록 페이지보다 단순
useFetchProducts hook 생성
useFetchProducts hook 생성export default function useFetchProducts() {
const {
data, error, loading, mutate,
} = useFetch<{
products: ProductSummary[];
}>('/products');
return {
products: data?.products ?? [],
error,
loading,
async refresh() {
mutate();
},
};
}기존에는 refresh 안에서 apiService를 통해 create 했다면, 여기서는 store를 만들어 처리
2. 상품 상세
ProductDetailPage 생성
ProductDetailPage 생성Description 컴포넌트 구현
Description 컴포넌트 구현고객 사이트 만들 때 쓴 걸 거의 그대로 재활용
key는 utils의 것을 활용
useFetchProduct hook 생성
useFetchProduct hook 생성여기까지는 특별한 게 없음 🎯 상품 추가/수정 기능에서 데이터 구조를 동적으로 조정하기 위한 Store를 준비하고, 그 다음에 화면 꾸미기
테스트 코드 작성
스토어 구현에 앞서 테스트 코드 작성
💡 불안할수록 구체적으로 작성할 것
ProductFormStore 생성
상품 추가/수정에서 공통으로 사용할 스토어를 생성
💡 원하는 상황을 먼저 테스트 코드로 묘사 → 테스트가 통과하도록 구현 해보기 단 하나의 테스트만 작성해야 한다면? 스토어 등의 비즈니스 로직
Product가Option을 갖고,Option은OptionItem을 갖는 구조 → 깊이 들어간 배열에 값을 추가하거나 삭제하는 게 쉽지 않음유틸리티 함수 append, remove, update를
src/utils/index.ts파일에 추가
useProductFormStore hook 생성
useProductFormStore hook 생성hooks/ProductFormStore.ts
ProductFormStore를 쉽게 쓰기 위한 hook
3. 상품 추가
ProductNewPage 생성
ProductNewPage 생성관리자 사이트를 만들면서 쓴 방식보다는 고객 사이트를 만들 때 쓴 방식에 가까움 💡 SWR을 쓰기 때문에 API 호출이 성공하면 캐시를 초기화해야 한다는 걸 잊지 말 것
ProductNewForm 컴포넌트 구현
ProductNewForm 컴포넌트 구현고객 사이트와 비슷 복잡한 로직은 컴포넌트 분리
Images 컴포넌트 구현
Images 컴포넌트 구현이미지 삭제
이미지 추가
Options 컴포넌트 구현
Options 컴포넌트 구현깊이가 더 깊은 옵션도 다뤄야 하기 때문에 Options 컴포넌트를 생성
옵션 삭제
옵션 추가
OptionItems 컴포넌트 구현
OptionItems 컴포넌트 구현아이템 삭제
아이템 추가
4. 상품 수정
수정은 데이터를 가지고와서 처리해야 하기 때문에 다른 것보다 좀 더 복잡함
ProductEditPage 생성
ProductEditPage 생성ProductNewPage와 유사useFetchProduct에서 얻어오기
ProductEditForm 컴포넌트 구현
ProductEditForm 컴포넌트 구현ProductNewForm컴포넌트와 유사Images,Options등은 전부 그대로 재사용개발 중일 때 hidden 사용
CheckBox컴포넌트는 이번에 처음 등장
🔎 팁
API를 백엔드 개발자와 같이 만드는 것이 중요 문제점이 있으면 서로 소통해야 함
Last updated