해결된 질문
작성
·
604
0
저는 평소에 아래와 같이 ComponentPropsWithoutRef을 이용하여 children이나 스타일등을 props로 내려받아 사용하고 있엇는데
export interface Props {
/** 북마크 여부 */
isBookmark: boolean;
/** 클릭했을 때 호출할 함수 */
onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
}
export const Bookmark = (Props: Props & ComponentPropsWithoutRef<"button">) => {
return (
<ButtonStyle {...Props}>
<BookmarkIcon isBookmark={Props.isBookmark} />
</ButtonStyle>
);
};
export default Bookmark;
강의에서는 아래와같이 FC<PropsWithChildren<Props>> 형식으로 받아 오던데 둘이 어떤 차이가 있을까요?
interface Props {
show: boolean;
onCloseModal: () => void;
style: CSSProperties;
closeButton?: boolean;
}
const Menu: FC<PropsWithChildren<Props>> = ({ closeButton, style, show, children, onCloseModal }) => {
const stopPropagation = useCallback<MouseEventHandler<HTMLDivElement>>((event) => {
event.stopPropagation();
}, []);
if (!show) {
return null;
}
return (
<CreateMenu onClick={onCloseModal}>
<div onClick={stopPropagation} style={style}>
{closeButton && <CloseModalButton onClick={onCloseModal}>×</CloseModalButton>}
{children}
</div>
</CreateMenu>
);
};
답변 1
2
제 타입은 정확히 Props + children인데
ComponentPropsWithoutRef<태그>는 해당 태그의 html 속성들을 의미합니다. button이면 button 태그의 속성들이겠죠. 좋은 타이핑은 아니라고 생각합니다. 쓰지 않는 속성들도 들어 있어서요.