20220118 Frontend 일일 개발일지 === ###### tags: `20220118` # 개발 내용 ## Login 화면 구성 ==로그인 화면이 드디어! 추가되었다 😛== ![](https://i.imgur.com/u2ruy1W.png) :::success >[color=magenta] `Login` 컴포넌트를 만들면서 느낀점이 많다. 1. 정말 정말 미리 만들어놓은 `atom` 들 덕분에 수월하다. - 해당하는 하위 컴포넌트들을 쏙쏙 빼서 CSS만 건드려주면 빠르더라. 2. 확실히 그래도 처음에 진행 속도가 느린점은 단점. ###### 다 좋지만, 팀으로 일할때의 `Atomic Design Pattern은...` - API call를 어디다가 붙일건지에 대한 컨벤션, - 각 단계에 대한 기준 등 정말 모호한 부분이 많겠다, 생각이 들었다. ::: #### 고민했던 사항들. 1. 사용자가 입력한 email의 형식 확인에 어떤 방법이 좋을까? a. `input` 태그에서 type을 `email` 로 해준다. b. 모든 입력에 대해서 `onChange` 이벤트를 통해 확인을 해준다. **내가 선택한 방법은 b번!** - `input` 태그에서 자동으로 지원해주는 validation 기능은 원하는대로 커스터마이징이 어렵다. - 무엇보다, 이쁘지 않다. -> 라는 이유로 정하게 되었다. ![](https://i.imgur.com/R6ZEGKi.png) `inputeEmail` 를 통해서 모든 판단을 시작한다. 1. 먼저 일단은 이메일 관련 입력 검증 flag에 문제가 있다고 설정하고, 2. 검증한 후, 3. 괜찮다면 flag를 다시 풀어주거나 / 안괜찮다면 냅두는 형식으로 진행했다. #### 더 발전해야 하는 것들 설정한 로직은 다음과 같은 이메일도 통과시킨다. - `testnaver@.com` - `@com` 이런 인풋도 통과시킨다. :::danger 이거.. 막아야한다. 로직 추가 예정이다! ::: #### API 통신 ![](https://i.imgur.com/aXBI67Z.png) 정말 무난하게 구현했다. > 아직 서버에서 CORS 처리가 되지 않아 try문 안에서 콘솔만 찍는다. ##### 궁금한 점 :::info 위와 같은 `try-catch`문에서의 에러 핸들링은 보통 어떤 방법으로 처리하는지 궁금하다. ::: ## Delivery 컴포넌트 생성 ![](https://i.imgur.com/QY8dG5I.png) - 정말 깜쯱한 컴포넌트를 생성했다 >[color=lightgreen] 참고사항 - KREAM에 실존하는 빠른배송 기능은 제외하기로 했다! - 따라서 해당 컴포넌트는 정말 만들기만 해서 원할때 슥 쓰는 용도로 만들었다. ## 상품 상세 정보 컴포넌트 구성 ![](https://i.imgur.com/739eNkh.png) ##### 제품의 이름 / 브랜드 / 이름 번역이 아닌 컴포넌트를 생성했다. 이 컴포넌트 또한 위에 `Delivery` 와 같이 같아 붙일 수 있게 생성했다. ```typescript= type ProductDetail = { modelNum: string; releasedAt: string; color: string; price: number; }; ``` 위와 같은 props를 받으며, 눈에 보이는 4가지 정보만을 받아 렌더링한다! ## Floater 컴포넌트 작성 ![](https://i.imgur.com/BmbOAou.png) `Product` 페이지에 들어갔을때, 스크롤을 내리다 보면 쨘 생기는 `floater` 를 생성했다. ==**특별한 로직이 있는 컴포넌트는 아니다!*== ~~CSS가 매우 깨대로웠을 뿐...~~ ```typescript= type FloaterProps = { imgSrc: string; backgroundColor: string; productName: string; productNameKor: string; isWishProduct: boolean; wishes: number; productId: string; buyPrice: number; sellPrice: number; }; ``` 상당히 많은 props가 필요할 것 같았다. 1. 좌측에 보이는 신발 이미지 - `imgSrc`, 2. **심지어 그 이미지 뒤에는 backgroundColor속성을 가진 div이므로**, 배경색 - `backgroundColor`, 3. 제품의 이름과 번역이름 - `productName`, `productNameKor`, 4. 해당 제품이 이미 찜 목록에 있는지에 대한 여부 - `isWishProduct`, 5. 얼마나 많은 인원이 찜을 했는지 - `wishes`, 6. 구매나 판매 버튼을 누르면 해당 상품에 대한 구매 판매 링크로 넘어가야하기 때문에 - `productId`, 7. `Knob` 컴포넌트에 가격정보를 내려줘야 하므로, `buyPrice`, `sellPrice`! 이렇게 제작했다. ==나름 이유가 다 있다!== #### 고민사항 :::warning *문제는, 해당 `Floater` 는 스크롤이 460px 정도 되면 보이고, 아니면 보이지 않는다는 점이다.* >[color=darkgreen] **해당 기능을 어떻게 구현할까?** 1. `Floater` 를 사용하는 컴포넌트에서 `useEffect` 로 scroll 감지. 2. `observer` 패턴 사용. -> 해당 기능은 추가할 **예정**이므로, 아직은 확정은 아니지만 1번을 선택할것 같다! :::