Giter VIP home page Giter VIP logo

21-1st-kaka0adult-frontend's Introduction

Team KakaoAdult

😎 Our Reference : https://www.kakaofriends.com/

📎Project Video Link

https://youtu.be/_XO0USXmh2Q

💬 프로젝트 개요

밈 기반의 제품을 구매하고 심플한 UI를 경험할 수 있는 사이트

👫 팀원

📅 프로젝트 기간

2021.06.07 ~ 2021.06.18

🔧 Skills

  • FE : React, React Router, SASS, ES6+
  • BE : Python, Django, Bcrypt, JWT, MySQL
  • Common : RESTful API

🐱‍👤 협업 Tool

  • Trello, Slack, Git-Hub

=======

👍 내가(박현찬) 구현한 것들:

  • 공통 콤포넌트

    • 단일 상품 카드 레이아웃
    • 단일 상품 좋아요/좋아요 취소 기능
    • 단일 상품 장바구니 추가 기능
    • 단일 상품 카드 리스트 컴포넌트
    • 사이드 메뉴 컴포넌트
    • 생명 주기 메소드를 사용한 사이드 메뉴 컴포넌트 슬라이드 효과
  • 로그인 페이지: 정규식 표현을 사용한 로그인 입력창 유효성 검사 기능

  • 신규 상품 페이지 레이아웃

  • 인기 상품 페이지 : 그리드를 사용한 레이아웃

  • 캐릭터 페이지 레이아웃

  • 상품 상세 페이지 :

    • 전체 레이아웃
    • 상품 선택 갯수만큼 장바구니 추가 기능

👍🏻 구현 기능 상세

1. 로그인&회원가입&로그아웃

  • 로그인 & 회원가입
  • 입력창 유효성 검사

2. 공통 컴포넌트

  • Nav, Footer, AsideMenu 공통 컴포넌트 구성
  • 상품 Card 컴포넌트 구성, Carousel 이미지 슬라이더 구현, 상품 검색창 구현

3. 상세 페이지

  • 메인 - 상세 - 유저 페이지 동적 라우팅
  • 비동기 데이터 통신 활용 화면 구성
  • 좋아요, 장바구니 기능 구현
  • 주문서 작성 기능

4. 📎 Route Path

  • /login : 로그인 페이지
  • /signup : 회원가입 페이지
  • /products/newList : 신규 상품 페이지
  • /products/hot : 인기 상품 페이지
  • /products/character : 캐릭터 페이지
  • /products/detail/:id : 상세페이지
  • /mypage : 마이페이지
  • /mypage/order : 주문 페이지
  • /mypage/cart : 장바구니 페이지

Reference

  • 이 프로젝트는 카카오 프렌즈 사이트를 참조하여 학습목적으로 만들었습니다. 실무수준의 프로젝트이지만 학습용으로 만들었기 때문에 이 코드를 활용하여 이득을 취하거나 무단 배포할 경우 법적으로 문제될 수 있습니다.
  • 이 프로젝트에서 사용하고 있는 사진 대부분은 직접 찍거나 unsplash에서 공유받은 Free 이미지이므로 해당 프로젝트 외부인이 사용할 수 없습니다.
  • 이 프로젝트에서 사용한 로고, 커서 이미지는 직접 제작한 것으로 외부인이 사용할 수 없습니다.

21-1st-kaka0adult-frontend's People

Contributors

eyes0n avatar saengmotmi avatar

21-1st-kaka0adult-frontend's Issues

msw로 mock api 작성

msw 관련 커밋 issue4번에 3개 들어있음

cra에서 nextjs로 마이그레이션 후 msw를 적용하는데 msw 내부 모듈 문제가 발생함

  • browser 환경에서 setupWorker호출을 못함
  • 호출 못하는 이유는 msw 내부 모듈에 있는 isNodeProcess()함수의 리턴값이 에러를 반환하기 때문.....

=> cna로 생성한 프로젝트에서는 정상 작동함.

해결 방법을 못찾아서 cna( create-next-app )을 사용하여 새로운 nextjs프로젝트를 만들고 여기에 msw를 적용함

  • 신규 상품 api
  • 인기 상품 api
  • 캐릭터 상품 api
  • 카테고리 상품 api
  • 키워드 검색 상품 api
  • 상품 상세 api
  • 장바구니 api
  • 좋아요 기능 api
  • 결제 api
  • 주문내역 api
  • 주문내역 상세 api
  • 좋아요내역 api

form요소 비제어 컴포넌트로 관리

여러 state를 사용하여 form요소를 제어하지 않고
ref를 사용하여 제어하기 -> 잦은 state 변화로 인한 리랜더링을 방지할 수 있다.

form필드에 대한 데이터를 new FormData(formRef.current)로 formData형식으로 생성하면
[ { [element name]: element value }, ...... ] 형태의 값으로 출력된다.

위의 값을 가지고 해당 요소의 값을 참조하여 제어할 수 있다.

  const formRef = useRef();

  const handleFormChange = (e) => {
    const data = new FormData(formRef.current);
    const { classList, name, value } = e.target;
    console.dir([...data]);
    console.log(data.has('payCard'));
    console.log('c', classList);
    console.log('n', name);
    console.log('v', value);
  };

  // jsx
  <form ref={formRef} onChange={handleFormChange}>
    <input name="first" />
  </form>

무한 스크롤

  • 신규 상품 페이지
  • 인기 상품 페이지
  • 캐릭터 페이지
  • throttle 적용
  • 무한스크롤 모듈화

nextjs 마이그레이션

  • nextjs 설치 및 node-sass, react-scripts, react-router-dom 제거
  • npm scripts 수정 ( "next dev", "next start", "next build" )
  • 전역 css 적용 (page/_app.js)
  • css module 적용
  • react-router-dom 제거 및 next/link & next/router 적용
  • mypage페이지 레이아웃 하위- 장바구니(cart), 주문(order), 결제(payment), 주문내역(orderlist)
  • 신규 상품, 인기 상품 페이지
  • 상품 상세페이지
  • 장바구니(cart) 페이지, 결제(payment) 페이지 연동
  • 각 페이지 fetch 데이터 연동
  • 캐릭터 페이지
  • 카테고리 페이지 -> 캐릭터 페이지랑 레이아웃이 똑같은 관계로 안함
  • #8
  • 사이드 메뉴
  • nav
  • 검색바
  • 각 페이지에 있는 라우팅
  • 각 페이지 기능 함수(좋아요, 장바구니 등등)
  • #11
  • #9
  • next.config.js 페이지 라우팅 설정
  • pages폴더에 있는 파일들을 페이지랑 컴포넌트로 분리
  • #10
  • ssr 적용
  • 주문내역
  • 주문 상세
  • 주문 상세 스타일링
  • 좋아요 내역

인기 상품 페이지 그리드

products의 형태가 [ [ ],[ ],[ ] ] 2중 배열이고 전체 그리드를 2개의 그리드로 나누어서
2중 map으로 홀짝(oddOrEven)에 대한 각각의 그리드를 적용

  <div className='odd'></div>
  <div className='even'></div>
  .... 반복

각 그리드 셀에서 사진의 크기가 넘치는 문제가 있었는데 a 링크에 height값을 부모의 값으로 상속시켜 해결

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.