type cardProps = {
title: string
description?: string
actionLabel?: string
onActionClick: () => void
}
function Card({ title, description, actionLabel, onActionClick }: CardProps) {
return (
<section className="card">
<header className="cardHeader">
<h2> {title} </h2>
{ actionLabel ? <button onClick={onActionClick}> {actionLabel} </button> : null }
</header>
{ description ? <p className="cardDesc"> {description} </p> : null }
</section>
)
}function Card({ children }: { children: React.ReactNode }) {
return <section className="card"> { children } </section>
}
Card.Header = function CardHeader({ children }: { children: React.ReactNode }) {
return <header className="cardHeader"> { children } </header>
}
Card.Title = function CardTitle({ children }: { children: React.ReactNode }) {
return <div className="cardBody"> { children } </div>
}
Card.Footer = funcdtion CardBody({ children }: { children: React.ReactNode }) {
return <footer classsName="cardFooter"> { children } </footer>
}
export { Card }<Card>
<Card.Header>
<Card.Title> 월간 리포트 </Card.Title>
</Card.Header>
<Card.Body>
<ReportSummary/>
</Card.Body>
<Card.Footer>
<small> 최근 업데이트 : 30분 전 </small>
</Card.Footer>
</Card>// Flat API
<Card title="월간 리포트">
<ReportSummary/>
</Card>// Compound API
<Card>
<Card.Header>>
월간 리포트
</Card.Header>
<Card.Body>
<ReportSummary/>
</Card.Body>
</Card>