Giter Site home page Giter Site logo

foodking's Introduction

🍽 기획의도

image


✨ 데모 사이트

https://mukdaejang-3b8e6.web.app/


📆 프로젝트 기간

2022.03.08 ~ 2022.03.31


👨‍💻 팀원

김민성 김효식 원종빈 조용우


📚 기술스택

HTML5 CSS3 TypeScript React Redux Firebase Styled Components


😥 개선 전

  • tab focusing 불가능
  • 프로필 이미지 상태값 새로고침 시 초기화되어 깜빡거림
  • 프로필 아이콘 클릭 시 드롭다운 닫기 버튼 없음 , 개별 삭제 불가능
  • 부적절한 로그아웃의 위치
  • semantic tag 미사용

image


🤩 개선 후

  • 키보드로 tab focusing 가능
  • 새로고침 시 프로필 이미지 깜빡거리지 않음
  • 프로필 아이콘 클릭 시 드롭다운 닫기 버튼 추가 , 개별 삭제 가능
  • 로그아웃 위치 변경
  • semantic tag를 사용한 semantic markup
  • SEO 향상

image


프로필 사진 깜빡임 문제

👎 기존 망고플레이트 👍 먹대장
헤더깜빡임 헤더깜빡임해결

드롭다운 닫기 버튼 ❌ & 개별 삭제 불가능 & 로그아웃 버튼

👎 기존 망고플레이트 👍 먹대장
image image

스켈레톤 UI 적용

👎 기존 망고플레이트 👍 먹대장
망고플레이트_스켈레톤 먹대장_스켈레톤

|


Tabable 접근성 문제 개선

👎 기존 망고플레이트 👍 먹대장
망고플레이트tab 먹대장tab

리팩토링

불필요한 렌더링 방지(React.memo)

👎 이전 먹대장 👍 현재 먹대장
memo적용전 memo적용

렌더링 성능 개선(Lazy Loading(code Spliting), useCallback)

👎 이전 먹대장 👍 현재 먹대장
MainVSMatijipList MainVSMatijipList(after)
MainVSMatijipList2 MainVSMatijipList2(after)

foodking's People

Contributors

jjongbin avatar minsoftk avatar ywc8851 avatar h-sick avatar

Stargazers

Jeonghun Ha avatar Dahee Jo avatar Clifford Choi avatar

foodking's Issues

copy function in page link copy

Problem & Opportunity

Context or Reproduce

공유하기 버튼을 눌렀을때 페이지의 링크가 유저의 클립보드에 저장되도록 하는 기능

Checklist

  • 복사 기능

[Firebase] firebase 폴더 구조화

Problem & Opportunity

기존 firebase.ts에서 모든 것을 처리했었습니다.
request 보낼 때 방식이 2가지였습니다.

Context or Reproduce

firebase.ts에서 기능별로 구조화하여 저장
data를 받아올때 request 받는 방식을 하나로 통일

Checklist

  • 폴더 구조화
  • api request 방식 통일

[검색창] 태그 수정

Problem & Opportunity

  • SearchBox에 검색어 tab의 태그는 div(role) 혹은 button으로 수정해야 함.
  • 키워드 제안 파트 태그는 a태그로 바꿔줘야 한다.
    list에 이벤트를 거는 것은 시멘틱하지 않다.

Context or Reproduce

Checklist

  • tab의 태그는 div 혹은 button으로 수정
  • 키워드 제안 파트 태그는 a태그로 수정

[font] add spoqa han sans neo files and apply in global.tsx

Problem & Opportunity

  • 웹폰트 적용하려고 했으나 cdn 사용시 속도가 느림

Context or Reproduce

  • 로컬에 파일 다운받아서 공용 스타일에 @fontface 직접 작성

Checklists

  • font-weight 4가지 버전으로 src/styles/global.tsx 에 공용 폰트 작성 (700, 400, 300, 100)

emotion css를 styled로 사용

Problem & Opportunity

스타일 작성시 theme의 변수를 사용하는 것이 어렵다.

Context or Reproduce

emotion의 css 대신에 styled를 이용하면 함수식으로 쉽게 사용할 수 있다.

Checklist

Banner - Modal창 Portal로 만들기

  • : Modal창 Portal로 만들기

  • 부모 컴포넌트의 스타일링 속성에 제약을 받아 z-index 등으로 번거로운 후처리를 해줘야한다.

  • Portal을 통해 독립적인 구조부모-자식 관계를 동시에 유지할 수 있다면, z-index 등 부모 컴포넌트의 제약에서 벗어날 수 있다.

https://ko.reactjs.org/docs/portals.html

[헤더] 프로필 서브메뉴 구현 & 데이터 렌더링

Context or Reproduce

프로필 클릭 시 최근 본 맛집 , 가고싶다 의 서브메뉴로의 이동이 가능하게끔 구현해야한다.
mock data를 이용해 각 메뉴로 이동했을 때 데이터를 렌더링 하여 화면에 표시해야한다.

Checklist

  • 서브메뉴 이동구현
  • 데이터 렌더링

Modal markup & css

  • 소셜 로그인 modal markup
  • 소셜 로그인 modal css
  • 프로필 클릭시 배경 modal markup
  • 프로필 클릭시 배경 modal css

검색 결과 페이지 / 라우팅

Problem & Opportunity

검색한 문자열을 엔드포인트에 더해주고, 검색 결과 사이트로 링크시켜준다.
url 해당하는 컴포넌트를 렌더링 시켜주고, 전달된 파라미터 keyword로 검색 결과를 렌더링 시켜준다.
이때, 한글로 검색을 했을 경우 url엔 이상이 없는지 확인.

path를 이용할 것인가? 쿼리스트링을 이용해야하나?

Context or Reproduce

Checklist

  • 검색창에 검색 버튼을 눌렀을 때, 검색결과 페이지로 이동
  • 검색창에 url 표현을 어떻게 해줄 것인가에 대한 방법 찾기

[검색창] DOM 요소 접근 코드 수정

Problem & Opportunity

SearchModal에서 클릭이 되었을 시, css를 바꾸기 위해서 DOM 요소에 직접 접근.
이는 명령형에 가깝다. React의 선언적이라는 특징에 맞춰서 로직을 바꿔주기
하나의 상태를 가지고 각각의 상태에 따라 CSS 적용해주기

Context or Reproduce

Checklist

  • : state를 통해 css 제어

기획 및 기획 발표 준비

  • 주제선정
  • 기술스택 선정
  • git template
  • 역할 분담
  • figma 작성
  • 구조설계
  • use case 작성
  • story board 작성
  • 발표준비 및 ppt 작성

[헤더] 프로필 서브메뉴 데이터유무에 따른 페이지 랜더링

Problem & Opportunity

해당하는 데이터가 없는 경우 데이터가 없다는 화면이 표시되지 않음

Context or Reproduce

data의 길이로 판단하여 빈 data 배열인 경우 표시할 데이터가 없다는 화면을 보여주도록 구현

Checklist

  • 최근 본 맛집 ul 의 데이터 없는 경우 페이지 구현
  • 가고싶다 ul 의 데이터 없는 경우 페이지 구현

리뷰페이지 점수 눌렀을때 선택되는 기능

Problem & Opportunity

눌렀을때 회색에서 주황색으로 변하도록 한다

Context or Reproduce

눌렀을때 회색에서 주황색으로 변하도록 한다

Checklist

  • 세개중에 하나만 선택이 되도록 구현
  • 이미지와 글자색상 모두 변경
  • 초기에는 모두 회색

review 쓰는 페이지 이미지 추가

Problem & Opportunity

review 쓰는 페이지 이미지 추가

Context or Reproduce

이미지가 순서대로 수평으로 보여지도록

Checklist

  • 이미지 업로드 기능
  • 이미지가 수평으로 보여지도록

emtion.css -> emotion.styled 방식으로 style 적용

Problem & Opportunity

css 작업 시 props를 통해 style을 바꿔야 할 경우가 존재하는데 emotion.css 방식으로 작성 시 props 사용에 제약이 있기 때문에 emotion.styled 방식으로 작성 시 props 사용에 용이하다.

Context or Reproduce

기존에 emotion.css 방식으로 구현했던 것들을 emotion.styled 방식으로 구현해야 한다.

Checklist

  • emotion.styled로 변경

검색결과 페이지의 filter UI

Context or Reproduce

검색 결과에 대한 음식점들을 사용자들이 필터를 직접 설정할 수 있게
필터링을 해주는 UI 컴포넌트를 개발.

정렬 순서, 지역별, 음식 카테고리 별

Checklist

  • : Markup
  • : css

does not exist on type (style component prop error)

Problem & Opportunity

style component prop error

Context or Reproduce

Property 'background' does not exist on type '{ theme?: Theme | undefined; as?: ElementType | undefined; } & ClassAttributes & ButtonHTMLAttributes & { ...; }'.

styled.button<{ background: string }>
위와 같은 식으로 style component에서 타입을 명시해준다

Checklist

  • Solve

[검색창] Enter key로 Search시 두번 클릭되는 문제

Problem & Opportunity

Search 컴포넌트에서 검색 버튼을 Enter로 눌렀을 때, 두번의 alert가 발생
하나의 alert만 뜨도록 해결하기.
원인을 파악하고 댓글로 남기기.

Context or Reproduce

Checklist

  • : 원인 파악
  • : 해결

emotion style setting

  • global style, theme initial setting
  • emotion 관련 tsconfig 설정
  • 절대 경로 설정 (tsconfig, webpack)

[검색창] Modal의 추천 검색어 클릭시 Link 오류

Problem & Opportunity

tab이 가능하게 태그를 변경하면서 다수의 태그들을 tab이 가능한 태그들로 변경을 했는데,
본래 기능인 Link가 되지 않는 문제가 발생했다. button 태그로 바꾸면서 동작이 끊긴 것 같다.

Context or Reproduce

Checklist

  • 정확한 원인 파악
  • Modal의 추천 검색어를 클릭 했을 시, 검색 결과 페이지로 이동.

a tag -> link component

Problem & Opportunity

기존에 사용하던 a 태그를 link component로 변경

Context or Reproduce

기존에 사용하던 a 태그를 link component로 변경

[헤더] 메인페이지 유무에 따른 헤더 렌더링

Problem & Opportunity

기존의 헤더는 메인페이지인지 아닌지에 상관없이 랜더링이 된다

Context or Reproduce

pathname을 통해서 현재 페이지가 메인페이지인지 아닌지 useState를 통해 상태를 관리한다.

Checklist

  • 메인페이지 유무를 판별하는 hook 작성
  • 메인페이지의 유무에 따라 다르게 헤더 랜더링하기

[Redux] 로그인 유무, 모달 state 관리

Problem & Opportunity

modal 창을 열 때 상태관리를 props를 통해 해주었는데 컴포넌트 depth가 깊어짐에 따라 redux로 상태관리를 하는게 편할 것 같아 redux로 상태관리를 하기로 결정했습니다.

Context or Reproduce

redux로 modal open / close state 관리하기
redux로 user login state 관리하기

Checklist

  • redux로 modal open / close state 관리하기
  • redux로 user login state 관리하기

[검색 결과 페이지] 필터 tabable

Problem & Opportunity

필터 컴포넌트의 기능이 아직 완전하지 않다. tab이 가능한지 확인하고,
각각을 클릭했을 때, 클릭된 CSS를 적용 시켜주고 데이터를 sort, filter가 가능해야한다.
적용하기 버튼을 만들어줘야 한다.

Context or Reproduce

Checklist

  • tab 가능여부
  • 적용하기 버튼 만들기
  • 각각의 셋팅을 맞추고 적용하기 클릭하면, 실제 데이터에 적용되는지 확인하기

[헤더] 로그인 / 로그아웃에 따른 프로필 이미지 / 아이콘 변경

Problem & Opportunity

현재 사용자가 로그인되어있는 사용자이면 사용자의 프로필 이미지를 아이콘 대신 넣어주고 로그인 되어있지 않는 사용자이면 사람표시의 아이콘을 넣어주어야 합니다. 현재 로그아웃 기능이 없으므로 로그인을 했을 때 로그인 버튼을 로그아웃 버튼으로 변경해주어야 합니다.

Context or Reproduce

hook을 통해서 firebase auth에서 현재 사용자가 존재하는 사용자인지 판단하고 로그인 시 사람표시 아이콘 -> 현재 사용자의 프로필사진으로 변경하여 렌더링합니다. 로그인한 사용자가 로그아웃을 했을 경우 프로필 사진 -> 사람표시 아이콘으로 변경하여 렌더링합니다.

Checklist

  • 로그인 했을 때 로그인 버튼을 로그아웃 버튼으로, 로그아웃 했을 때 로그아웃 버튼을 로그인 버튼으로 변경
  • 로그인 했을 때 프로필 사진으로 렌더링
  • 로그아웃 했을 때 사람표시 아이콘으로 렌더링

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.