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.

Aller à l'installation

Informations de source

Dépôt
tomevault-io/skills-registry
Dernière activité de la source
28 avril 2026 à 22:53
Langue détectée de SKILL.md
anglais
Étoiles
1
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
2 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
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 -->
Voir sur GitHub