Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[정태원] 기능구현 챌린지 #6

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open

Conversation

teawon
Copy link
Member

@teawon teawon commented May 12, 2024

필수 구현 사항

  • 질환 명 검색시 API를 호출하여 드롭박스를 통해 추천 검색어를 보여주는 기능을 구현합니다.
    • 검색어가 없을 시 “검색어 없음” 표출
    • 최근에 검색어를 보여줍니다.
  • 검색어를 검색 시 결과를 리스트로 보여줍니다.
    • 검색어가 없을 시 화면도 구현
    • 검색 결과 컴포넌트를 클릭 시 https://clinicaltrialskorea.com/studies/{검색어ID} 링크로 이동
  • 입력마다 API 호출하지 않도록 API 호출 횟수를 줄이는 전략 수립 및 실행
    • 검색어 입력 시 500ms마다 요청이 되도록 간단한 디바운스 적용
    • useQuery에 enabled을 사용해 조건에 맞을 경우에만 실행하도록 구현
  • API를 호출할 때 마다 console.info("calling api") 출력을 통해 콘솔창에서 API 호출 횟수 확인이 가능하도록 설정

추가 구현 사항

  • 공통 컴포넌트 구현
    • 헤더 구현
    • 검색 리스트 구현
    • 드롭박스 구현
    • 모달 구현
  • 커스텀훅 사용을 통한 로직 분리

선택 구현 사항

  • [선택 사항 1] 키보드만으로 추천 검색어들로 이동 가능하도록 구현합니다.
    • ex) 키보드 방향키, 탭을 사용하여 다음 추천 검색어로 이동
  • [선택 사항 2] React-Query를 활용하여 캐싱을 구현합니다.
  • [선택 사항 3] 검색어 결과는 페이지네이션 또는 무한스크롤 선택합니다.
    • 외부 라이브러리 없이 구현할 경우 추가 점수
  • [선택 사항 4] 스크랩 저장 기능을 구현합니다.
    • 페이지를 새로고침 해도 리스트가 남아있도록 구현.
    • 즐겨찾기 페이지에서 스크랩한 결과물 리스트 보여주도록 구현.
    • 확인 모달을 통해 스크랩을 삭제.
  • [선택 사항 5] 뷰포트 크기에 따른 반응형 UI를 구현합니다.
  • [선택 사항 6] Storybook을 사용하여 UI 인터렉션 테스팅을 구현합니다.

Copy link
Member

@gyeong3un2 gyeong3un2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통 컴포넌트와 페이지에서만 사용하는 컴포넌트 분리를 잘 해주셔서 구조 볼 때도 편하고, 코드가 깔끔하게 보이는 것 같아요!
수고하셨습니당! 😁

<button
type={type}
onClick={onClick}
className={`${customStyle ? customStyle : baseStyle} ${buttonStyle}`}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

css 클래스 이름을 조건부로 적용할 수 있는 라이브러리 중에서 clsx가 있는데,
이게 npm trends에서 보면 classnames과 같은 유사한 라이브러리 중에서도 상위권에 속해서 말씀드려용!
clsx는 다양한 조건부 연산자를 지원해서 잘 사용한다면 유용하게 사용할 수도 있을 거 같아요!
제가 사용해봤을 때도 사용 안했을 때 보다 더 가독성이 좋아지는 것 같기도 해요 ㅎㅎ 😄

import clsx from 'clsx';

<button
  className={clsx(customStyle ? customStyle : baseStyle, buttonStyle)}
>
  // ...
</button>

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확실히 코드가 더 깔끔해지는 것 같네요!
좋은 정보 감사합니다ㅎㅎ

Comment on lines +10 to +14
<button
onClick={onClick}
aria-pressed={checked}
className="p-2 bg-white border-none cursor-pointer focus:outline-none"
>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aria-pressed 속성을 사용하여 웹 접근성을 고려한 점이 정말 좋은 것 같아요👍

Comment on lines +6 to +8
const fontSize = "text-sm";
const height = "h-6";
const chipClass = `flex p-4 items-center bg-lightGray justify-center text-black rounded-full ${fontSize} ${height}`;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tailwind CSS 클래스를 변수화해서 사용하는 부분이 인상적이네요.
이렇게 하면 코드의 가독성이 높아지고 유지 보수도 용이할 것 같아요!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

의견 남겨주셔서 감사합니다~~🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants