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

[김미소] week11 #381

Conversation

nightowlzz
Copy link
Collaborator

@nightowlzz nightowlzz commented May 5, 2024

요구사항

기본

  • card 케밥 작업
  • 모달 6가지 작업 ( 폴더추가, 폴더추가, 삭제하기, card 의 메뉴 팝업 등)
  • 공유하기 부분에서 링크복사만 작업

심화

주요 변경사항

스크린샷

image

멘토에게

  • 모달은 하나인데, 안에 컨텐츠를 바꾸는 방법을 어떻게 하면 좋을지 모르겠습니다.
    어떤 방법으로 작업하는게 좋은지 대챡적인 으로라도 알려주세요!

@nightowlzz nightowlzz changed the base branch from main to part2-김미소 May 5, 2024 12:54
@nightowlzz nightowlzz added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다.. labels May 5, 2024
@nightowlzz nightowlzz requested a review from devToram May 5, 2024 13:18
Copy link
Collaborator

@devToram devToram left a comment

Choose a reason for hiding this comment

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

https://velog.io/@j8won/%EB%A6%AC%EC%95%A1%ED%8A%B8-Portal%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%AA%A8%EB%8B%AC%EC%B0%BD%EC%9D%84-%EC%83%9D%EC%84%B1%ED%95%98%EC%9E%90#portal%EC%9D%98-%ED%8A%B9%EC%A7%95
위의 링크가 가장 핵심적으로 모달 구현한 거 같아서 첨부해요!
createProtal + children 으로 내부 내용 넘기는게 가장 일반적인 모달 구현인 거 같아요!

clickEvent?: (value?: any, index?: number) => void;
$clickEventName?: string;
$clickIndex?: number | undefined;
$type?: 'button' | 'reset' | 'submit' | undefined;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
$type?: 'button' | 'reset' | 'submit' | undefined;
$type?: ButtonHTMLAttributes<HTMLButtonElement>['type']

동일할 거 같아요!

}

function CheckBox({ $data }: ICheckBoxData) {
if (typeof $data) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

typeof 로 분기처리하는 것은 트랜스파일시에 문제는 없지만, $data.data 가 있는지 판단하는 식으로 짜는 것을 추천드려요!

}: IButtonModule) {
const [value, setValue] = useState('');
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
const [value, setValue] = useState('');
const [value, setValue] = useState<string>('');

string 타입같은 경우엔 확실히 타입을 정해주시는 게 좋아요!

/>
{$btnShow && <Button $btnClass={$btnClass}>{$btnText}</Button>}
{$btnShow && (
<Button $btnClass={$btnClass} onclick={() => handleButtonEvent(value)}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

return 부에서 가져오는 value 가 아닌 위쪽에 있는 state 상의 value 인 경우에는 그냥 handleButtonEvent에 input 을 안받고 바로 value 를 참조하게 하시는 것을 추천드려요!
근데 handleButtonEvent가 input 으로 받은 text 를 쓰는 곳이 없는 거 같아요...!

Comment on lines +6 to +7
contant: IFolderContent[] | [] | undefined | null;
loading: boolean;
Copy link
Collaborator

Choose a reason for hiding this comment

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

IFolderContent[] 타입 내부에 [] 도 들어있어서 하나만 적어주시면 될 거 같아요!

Suggested change
contant: IFolderContent[] | [] | undefined | null;
loading: boolean;
contant: IFolderContent[] | undefined | null;
isLoading: boolean;

Comment on lines +13 to +23
{loading ? (
<EmptyBox>Loading...</EmptyBox>
) : contant ? (
<PostCardWrap>
{contant?.map((data) => (
<PostCard key={data.id} {...data} />
))}
</PostCardWrap>
) : (
<EmptyBox>저장된 링크가 없습니다.</EmptyBox>
)}
Copy link
Collaborator

Choose a reason for hiding this comment

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

렌더부에 3항 연산자를 중복으로 쓰면 가독성이 많이 떨어지게 되어서 loading 일 때를 따로 early return 해주시는 걸 추천드려요!

Suggested change
{loading ? (
<EmptyBox>Loading...</EmptyBox>
) : contant ? (
<PostCardWrap>
{contant?.map((data) => (
<PostCard key={data.id} {...data} />
))}
</PostCardWrap>
) : (
<EmptyBox>저장된 링크가 없습니다.</EmptyBox>
)}
if(loading) {
return <EmptyBox>Loading...</EmptyBox>
}
return
contant ? (
<PostCardWrap>
{contant?.map((data) => (
<PostCard key={data.id} {...data} />
))}
</PostCardWrap>
) : (
<EmptyBox>저장된 링크가 없습니다.</EmptyBox>
)}

interface IButtonList {
$menu: IFolderMenuButtonApi | null;
$loading: boolean;
$btnActive: number;
Copy link
Collaborator

Choose a reason for hiding this comment

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

변수 이름을 보면 number 자료형과 맞지 않는 거 같아요! id 를 뜻한다면 $activeBtnId 가 좋을 거 같아요!

return;
}
// api/users/1/links?folderId={해당 폴더 ID}
setDynamicAPI(`${FOLDERCONTANTLISTAPI}?folderId=${api}`);
const result = menu?.data.filter((data) => +data.id === +api);
Copy link
Collaborator

Choose a reason for hiding this comment

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

api 의 자료형은 string 이라 숫자로 변화하는 것보다 data.id 를 toString 하는 게 혹시 모를 위험을 대비하기 좋아요! (number 로 바꾸는데는 side effect 가 많은 경우가 많아서요ㅠㅜ)

};

// contant list
const contantSearch = search ? search : contant?.data;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
const contantSearch = search ? search : contant?.data;
const contantSearch = search ?? contant?.data;

@devToram devToram merged commit 8e673c5 into codeit-bootcamp-frontend:part2-김미소 May 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다..
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants