-
Notifications
You must be signed in to change notification settings - Fork 2
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
[FE] refactor: Checkbox, CheckboxItem 컴포넌트 역할 분리 #1005
base: develop
Are you sure you want to change the base?
Conversation
Deploying 2024-review-me-release with Cloudflare Pages
|
tabIndex?: number; | ||
} | ||
|
||
interface FinalCheckboxItemBaseProps extends CheckboxItemBaseProps, CheckboxItemProps{}; |
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.
CheckboxItemProps가 이미 CheckboxItemBaseProps를 확장하고 있는데, interface FinalCheckboxItemBaseProps extends CheckboxItemBaseProps, CheckboxItemProps{};
라고 타입을 지정해야하는 이유가 있나요?
handleKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void; | ||
} | ||
|
||
const CheckboxItem = ({ id, label, isChecked, isDisabled = false, handleChange, ...rest }: CheckboxItemProps) => { | ||
const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => { |
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.
props에 handleKeyDown은 Checkbox에게 전달되고, 컴포넌트안에서 handleKeyDown을 또 선언하고 있어서 헷갈리네요 🤔
className="checkbox-item" | ||
tabIndex={tabIndex} | ||
aria-label={isCheckedLabel} | ||
onKeyDown={handleKeyDown} |
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.
CheckboxItemBase가 스타일링을 담당하는 기본 컴포넌트라고 설명이 되어 있지만, 체크 박스나 라벨 선택 시 선택/해제 기능을 위해서 onKeyDown이라는 이벤트를 가지는 건가요?
<S.CheckboxItem | ||
className="checkbox-item" |
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.
기존에 구현 사항에 충돌 때문에 클래스명을 checkbox-item이라고 한건가요?
CheckboxItem 내에서 CheckboxItemBase가 사용되고 CheckboxItemBase의 클래스가 checkbox-item인 구조가 헷갈렸어요.
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.
올리 컴포넌트 역할이 많아져서, 책임을 분리하고 싶었군요.
의도와 시도는 좋으나, 제가 느꼈을 때 체크박스 ui 구조, 스타일이 바뀌었을 때 변경해야하는 부분이 많아서 유지 보수 측면에서 좋을까, 체크 박스 컴포넌트를 구현한 올리가 아닌 다른 개발자가 사용했을 때 이해하기 쉬울까라는 점에서 생각을 해봐야할 것 같아요.
스타일을 담당하는 컴포넌트라는 책임이 컴포넌트명에 더 들어났으면 좋겠어요.
비슷한 컴포넌트명이 많고, 체크 박스라는 단순한 컴포넌트에 비해 계층 구조가 있는 편이라 헷갈렸어요. (CheckboxItem, CheckboxItemBase, CheckBox, CheckBoxBase....)
열심히 구현했는데 아쉬운 피드백을 남기게 되어서 미안하네요 🥹
그래도 더 좋은 코드를 위해 시도하는 올리의 모습 칭찬합니다. 👍
🚀 어떤 기능을 구현했나요 ?
🔥 어떻게 해결했나요 ?
상속 구조
-Base
컴포넌트는 공통 속성(id
,label
,isChecked
등등)을 기본으로 요구하고, 스타일링을 담당하는 기본 컴포넌트입니다.onChange
핸들러를 통해 사용자와 상호작용 가능한 컴포넌트, readonly인 컴포넌트는 일단 Base를 상속받습니다.용도별 인터페이스 분리
컴포넌트 분리로 필요한 속성만 전달
컴포넌트 분리의 연장선입니다.
$isReadonly
,isDisabled
가 true임에도 매번 값을 전달해야 합니다.즉 동적으로 꼭 전달해야 하는 값만 보낼 수 있습니다.
기본 인터페이스를 제공하되, rest prop 사용 가능
📝 어떤 부분에 집중해서 리뷰해야 할까요?
📚 참고 자료, 할 말
이제 복원 로직 리팩토링하러 갑니다 🙂