다들 Component Composition 어떻게 하시나요.예) 같은 디자인, 내부 요소를 가진 컴포넌트이지만 사용처에 따라 시멘틱 의미가 달라지거나 다른 태그를 사용해야 할 때import { ComplexButton } from "complex-button";
import { Link } from "react-router";
export function ButtonAsLink() {
return (<>
{/* radix style */}
<ComplexButton asChild>
<Link to="/link">
Hello
</Link>
</ComplexButton>
{/* `as` Style */}
<ComplexButton as={Link} />
</>);
}
@radix-ui/react-slot
이 참 좋아서 애용하고 있긴 한데, asChild를 쓸 경우 children까지 신경써야 하는 경우가 있어서 as
prop같은 스타일도 같이 사용할까 생각 중이에요(<= 근데 라이브러리 뭐 쓸지 못찾아서 고민).여기에 더해서 ComplexButtonGroup 같은 컴포넌트를 만든다고 할 때, query parameter를 조작할 일이 있으면(singular ButtonGroup의 selection 상태를 query parameter로 컨트롤) 당연히 Link
컴포넌트를 사용해서 시멘틱 맥락을 노출하는 것이 좋은데, 이걸 깔끔하게 할 방법이 떠오르지 않더라고요 (일반 ButtonGroup이면 onClick과 이벤트 핸들링으로 전파가 가능한데, query params를 사용하면 Item의 각 value마다 query params를 가진 url을 렌더해줘야 하니까 동작이 크게 달라짐).이걸 일반화 하려면 어떤 식으로 사용하는 게 좋을까요?제가 생각하는 to-be 는 아래랑 비슷한데, 이걸 구현하는 좋은 방법이나 아이디어 있으면 의견 부탁드려요.import { ComplexButton } from "complex-button";
import { Link } from "react-router";
export function ButtonAsLink() {
return (<>
{/* radix style */}
<ComplexButton asChild>
<Link to="/link">
Hello
</Link>
</ComplexButton>
{/* `as` Style */}
<ComplexButton as={Link} />
</>);
}
TL;DR
1. asChild
처럼 시멘틱 태그 변경할 때 어떤 방식이 좋을까
2. 화면에 보이는 요소(스타일, 내부 태그들)은 동일한데 인터렉션 동작만 크게 다르다면 이걸 어떻게 일반화 해야 할까(예: Button
<-> Link
)