Skip to main content

component-architecture

Component design patterns including composition, render props, compound components, and design systems. Use for reusable component architecture. Use when this capability is needed.

Jump to install

Source facts

Repository
tomevault-io/skills-registry
Last source activity
April 28, 2026 at 22:53
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
component-architecture
description
Component design patterns including composition, render props, compound components, and design systems. Use for reusable component architecture. Use when this capability is needed.
metadata
{"author":"ak-eyther"}
# Component Architecture Patterns ## Composition Pattern ```typescript function Card({ children }) { return <div className="card">{children}</div> } function CardHeader({ children }) { return <div className="card-header">{children}</div> } function CardBody({ children }) { return <div className="card-body">{children}</div> } // Usage <Card> <CardHeader>Title</CardHeader> <CardBody>Content</CardBody> </Card> ``` ## Compound Components ```typescript const Tabs = ({ children }) => { const [activeTab, setActiveTab] = useState(0) return ( <TabsContext.Provider value={{ activeTab, setActiveTab }}> {children} </TabsContext.Provider> ) } Tabs.List = ({ children }) => <div className="tabs-list">{children}</div> Tabs.Tab = ({ index, children }) => { const { activeTab, setActiveTab } = useTabsContext() return ( <button className={activeTab === index ? 'active' : ''} onClick={() => setActiveTab(index)} > {children} </button> ) } Tabs.Panel = ({ index, children }) => { const { activeTab } = useTabsContext() return activeTab === index ? <div>{children}</div> : null } // Usage <Tabs> <Tabs.List> <Tabs.Tab index={0}>Tab 1</Tabs.Tab> <Tabs.Tab index={1}>Tab 2</Tabs.Tab> </Tabs.List> <Tabs.Panel index={0}>Content 1</Tabs.Panel> <Tabs.Panel index={1}>Content 2</Tabs.Panel> </Tabs> ``` ## Render Props ```typescript function DataFetcher({ url, render }) { const [data, setData] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { fetch(url) .then(res => res.json()) .then(data => { setData(data) setLoading(false) }) }, [url]) return render({ data, loading }) } // Usage <DataFetcher url="/api/users" render={({ data, loading }) => loading ? <div>Loading...</div> : <UserList users={data} /> } /> ``` ## Headless Components ```typescript function useDropdown() { const [isOpen, setIsOpen] = useState(false) const toggle = () => setIsOpen(!isOpen) const close = () => setIsOpen(false) return { isOpen, toggle, close } } // Usage - completely custom UI function MyDropdown() { const { isOpen, toggle, close } = useDropdown() return ( <div> <button onClick={toggle}>Toggle</button> {isOpen && ( <div onClick={close}> Custom dropdown content </div> )} </div> ) } ``` --- > Converted and distributed by [TomeVault](https://tomevault.io/claim/ak-eyther) — claim your Tome and manage your conversions. <!-- tomevault:4.0:skill_md:2026-04-14 -->
View on GitHub