-
Notifications
You must be signed in to change notification settings - Fork 1
[E팀] 웹 프론트엔드 파트 코드리뷰용 PR #30
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
base: review
Are you sure you want to change the base?
Conversation
| runs-on: ubuntu-latest | ||
| container: pandoc/latex | ||
| steps: | ||
| - uses: actions/checkout@v2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| - uses: actions/checkout@v2 | |
| - uses: actions/checkout@v4 |
최신 버전을 이용하지 않으신 이유가 있나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 위계에 해당 파일이 적절한지 잘 모르겠어요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컨테이너라는 디렉터리의 사용 이유가 궁금해요
이전의 컨테이너 프레젠터 패턴이 떠올라서요
해당 패턴은 현재는 사용을 권장하지 않아요
src/pages/Review/[id]/page.tsx
Outdated
| const handleImageClick = () => { | ||
| if (isThumbnailShow) { | ||
| setIsAnimating(false); | ||
| setTimeout(() => { | ||
| setIsThumbnailShow(false); | ||
| }, 300); | ||
| } else { | ||
| setIsThumbnailShow(true); | ||
| } | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 부분에서 여러 클린 코드 패턴을 적용해 볼 수 있을 거 같은데요
- 얼리 리턴을 이용해 인덴트 깊이를 줄일 수 있을 것 같고
- 300과 같은 매직 스트링을 변수로 선언해 코드에 의미를 부여할 수 있을 거 같아요
| import { CompleteRegistrationPage } from "@/pages/Onboarding/CompleteRegistration/page"; | ||
| import { SelectProfilePage } from "@/pages/Onboarding/UserRegistration/Profile/page"; | ||
| import { SelectPricePage } from "@/pages/Onboarding/UserRegistration/Price/page"; | ||
| import { SelectLocationPage } from "@/pages/Onboarding/UserRegistration/Location/page"; | ||
| import { SelectConceptPage } from "@/pages/Onboarding/UserRegistration/Concept/page"; | ||
| import { SelectFeaturePage } from "@/pages/Onboarding/UserRegistration/Feature/page"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
각 페이지를 lazy import해도 좋을 거 같네요
|
|
||
| interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { | ||
| isChecked: boolean; | ||
| className?: string; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
className은 확장하신 타입에 포함되어 있지 않을까요?
| /** | ||
| * 사용 예시 | ||
| * <CategoryTag categoryType="dance">무용</CategoryTag> | ||
| * <CategoryTag categoryType="classical">클래식</CategoryTag> | ||
| * <CategoryTag categoryType="ongoing">공연 중</CategoryTag> | ||
| * <CategoryTag categoryType="upcoming">공연 예정</CategoryTag> | ||
| * | ||
| */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 주석은 tsdoc으로 제공하면 좋을 거 같아요
| import { CategoryTagProps } from "@/types"; | ||
|
|
||
| export const CategoryTag = ({ categoryType, children }: CategoryTagProps) => { | ||
| const TagStyle = () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
파스칼 케이스의 변수명을 사용하신 이유가 궁금해요
| export const Genre = ({ genreType, className, size = 48 }: GenreProps) => { | ||
| const genreLogo = () => { | ||
| switch (genreType) { | ||
| case "Majestic": | ||
| return <Grand width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Delicate": | ||
| return <Grand width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Classical": | ||
| return <Classical width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Modern": | ||
| return <Classical width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Lyrical": | ||
| return <Lyrical width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Dynamic": | ||
| return <Lyrical width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Romantic": | ||
| return <Romantic width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Tragic": | ||
| return <Grand width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Familiar": | ||
| return <Grand width={size} height={size} viewBox="0 0 48 48" />; | ||
| case "Fresh": | ||
| return <Fresh width={size} height={size} viewBox="0 0 48 48" />; | ||
| default: | ||
| return null; // 또는 기본 아이콘을 반환할 수 있습니다 | ||
| } | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 서비스의 기획을 알지 못해 부적절한 리뷰가 될 수 있을 거 같은데요
해당 장르 컴포넌트를 사용하는 곳에서 모든 아이콘을 로드할 필요가 있을까요?
현재의 상태에서는 사용하지 않는 아이콘 파일도 로드해 번들링 사이즈가 커질 거 같아요
| export default function ScrollTop() { | ||
| const { pathname } = useLocation(); | ||
|
|
||
| useEffect(() => { | ||
| window.scrollTo(0, 0); | ||
| }, [pathname]); | ||
|
|
||
| return null; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
로직을 담당하는 컴포넌트를 사용하신 이유가 궁금해요
훅으로 사용할 수 있지 않을까요?
feat: mypage publishing
…lishing Feat/#47 clacoticket detail publishing
fix: 에러 핸들링 수정:
feat: 요청 사항 수정
hotfix: 로티 이미지 수정
hotfix: 그라디언트 추가
hotfix: 그라디언트 위치 수정
feat: 티켓북 초기 페이지 수정
�fix: qa 5
feat: 리프레쉬 쿠키 api 연동
feat: 리프레쉬 api 연동 수정
fix: axios 헤더 수정
feat: 프로필 이미지 api 연동 수정
feat: 마이페이지 리렌더링
fix: 리프레쉬 토큰 api 연동 삭제
1️⃣ 작업 내용 Summary📱💎
기존 코드에 영향을 미치지 않는 변경사항
기존 코드에 영향을 미치는 변경사항
✚ 작업 내용 스크린 샷📸
2️⃣ 리뷰어에게 공유할 내용👥
3️⃣ 추후 작업할 내용👋
main브랜치의 최신 코드를pull받았나요?