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 #362

Merged

Conversation

ohdong9795
Copy link
Collaborator

요구사항

기본

  • 폴더 페이지에 필요한 “폴더 이름 변경”, “폴더 추가”, “폴더 공유”, “폴더 삭제”, “링크 삭제”, “폴더에 추가” 모달을 만들어 주세요.
  • “폴더 공유” 모달의 기능은 클릭시 ‘{호스트 주소}/shared/{currrentFolderId}’ 로 접속 가능한 주소를 공유 또는 클립보드에 복사 가능하게 해주세요.
  • 팀내 2 ~ 3명이 짝을 지어 페어프로그래밍으로 여러 모달을 만들 때 사용할 모달 컴포넌트를 만들어 주세요.
  • 카드에 있는 케밥 버튼을 클릭할 경우 보여야 할 팝오버를 만들어 주세요.

심화

주요 변경사항

  • 모달 추가
  • 팝오버 추가
  • 카카오톡 공유하 api 추가

스크린샷

1
2
3
4
5
6
7

멘토에게

  • 6주차 동안 만들었던 landing 페이지를 react로 아직 옮기지 못했지만 요구사항은 folder 페이지이고 기능은 전부 완성해서 올립니다. url: https://5-weekly-ohdonghyeok.netlify.app/folder
  • figma 요구사항에는 기능만 적혀있어서 몰랐는데 제출하려 보니 페어프로그래밍이 요구사항에 있었네요.
    혼자서 진행했습니다.

@ohdong9795 ohdong9795 requested a review from Ahseo April 28, 2024 12:09
Copy link
Collaborator

@Ahseo Ahseo left a comment

Choose a reason for hiding this comment

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

전반적으로 컴포넌트들이 잘 쪼개져있고, 명명도 많이 정리가 된 것 같아요!! 고생하셨습니다.
callback을 props로 넘겨서 처리하는 부분들에서 명확하지 않은 부분들이 조금 있는데, 이 부분 위주로 보시면 코드를 더 개선할 수 있을 것 같아요!

Copy link
Collaborator

Choose a reason for hiding this comment

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

js와 jsx로 파일이름이 나뉘어진 컴포넌트들이 꽤 있네요. 혹시 어떤 이유로 파일 확장자가 다른 것인지 알 수 있을까요~?

return (
<ModalBack>
<ModalDiv $width={width} $height={height} $padding={padding}>
<CloseButton onClick={handleClose}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

닫기 버튼은 기능적으로 중요한 �요소인데요, 이 버튼에 대한 접근성을 높이기 위해 aria-label을 추가하는 것을 고려해야 합니다. 현재는 이미지 태그에만 alt 속성이 있는데, 버튼 자체에도 추가적인 설명이 있으면 좋겠습니다!

document.body.removeChild(script);
}
};
}, [src, error, option]);
Copy link
Collaborator

Choose a reason for hiding this comment

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

useEffect 훅의 종속성 배열에 error 변수가 포함되어 있습니다. 이는 error 상태가 변경될 때마다 훅이 재실행되게 만드는데요, 의도하지 않은 스크립트 재로드를 초래할 수 있으므로, 종속성 배열에서 error를 제거하는 것이 좋습니다!

}

const handleLoad = () => setLoading(false);
const handleError = () => setError(error);
Copy link
Collaborator

Choose a reason for hiding this comment

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

error를 받아와서 처리하는 것이 아닌 이미 존재하는 state를 한 번 더 세팅하도록 동작할 것 같네요!
const handleError = (newError) => setError(newError) 는 어떨까요?

Comment on lines +69 to +78
const CheckImg = styled.img`
width: 14px;
height: 14px;
${(props) => {
if (!props.$selected)
return css`
display: none;
`;
}}
`;
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 부분도 좋지만 더 간단히하면 컴포넌트를 렌더링 하는 곳에서 처리하는 것이 더 좋을 것 같아요! 만약 opacity였다면 props로 처리하는 것이 좋을텐데(영역을 차지하면서 보이지만 않는) 그것이 아니기 때문에 selected && <CheckImg />이런식이 더 좋을 것 같아요.

font-weight: 600;
`;

export default function ChangeModal({ title, width, height, padding, setter }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기도 마찬가지로 width, height를 optional로 받고 default 값을 세팅해주면 좋겠네요!

cursor: pointer;
`;

export default function Modal({ title, width, height, padding, setter, children }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

width, height의 경우는 기본 값을 미리 정해두면 어떨까요~? 다양한 곳에서 사용할 때 항상 width와 height를 넣어주는 것은 다소 번거로울 수 있을 것 같아요.

또 좋은 방법으로는 width, height를 주지 않으면 내부 컴포넌트에 fit하게 만드는 것도 방법이에요!

Comment on lines +18 to +29
@media screen and (min-width: 1124px) {
width: 1060px;
}

@media screen and (min-width: 769px) and (max-width: 1123px) {
width: 700px;
}

@media screen and (max-width: 768px) {
max-width: 687px;
}
`;
Copy link
Collaborator

Choose a reason for hiding this comment

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

반응형 기준들을 상수화하는 것도 좋을 것 같습니다~!

Copy link
Collaborator

Choose a reason for hiding this comment

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

반응형 코드가 생각보다 많죠~ 이를 좀 더 잘 정리해서 관리하려면 어떻게 해야할지 고민해보셔도 좋을 것 같아요!

useEffect(() => {
if (!scriptLoading && scriptError === null) {
if (Kakao?.isInitialized()) return;
Kakao?.init('3d9ed3d2882a865e3a41390794c8ec0d');
Copy link
Collaborator

Choose a reason for hiding this comment

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

카카오톡 공유 기능을 위해 외부 스크립트를 로드하고 초기화하는 로직이 잘 구현되어있네요!
하지만 이 방식은 중요한 API 키를 클라이언트 사이드 코드에 노출시킵니다. API 키를 환경 변수나 서버 사이드를 통해 관리하는 방법을 고려하는 것이 보안상 안전한데, env설정을 통해서 관리해보시는 것을 추천드려요!!!

<StyledDiv>
<LinkInput value={url} onChange={handleChange} placeholder='링크를 추가해 보세요' />
<StyledImg src={linkIcon} />
<AddButton onClick={setOpenModal}>추가하기</AddButton>
Copy link
Collaborator

Choose a reason for hiding this comment

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

onClick={() => setOpenModal(true)}와 같이 명시적으로 상태를 변경하는 함수를 호출하는 것이 더 좋을 것 같아요!

@Ahseo Ahseo merged commit 0dd45cc into codeit-bootcamp-frontend:part2-오동혁 Apr 29, 2024
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.

2 participants