
Frontend Patterns
适用于 React、Next.js、状态管理、性能优化和 UI 最佳实践的前端开发模式。
Install
npx skills add xu-xiang/everything-claude-code-zh --skill frontend-patterns -g -a claude-code -y- Repository
- xu-xiang/everything-claude-code-zh2k
- Category
- Design
- Updated
- 8mo ago
- License
- MIT
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
适用于 React、Next.js、状态管理、性能优化和 UI 最佳实践的前端开发模式。
前端开发模式
适用于 React、Next.js 和高性能用户界面的现代前端模式。
组件模式
组合优于继承 (Composition over Inheritance)
// ✅ GOOD: 组件组合
interface CardProps {
children: React.ReactNode
variant?: 'default' | 'outlined'
}
export function Card({ children, variant = 'default' }: CardProps) {
return <div className={`card card-${variant}`}>{children}</div>
}
export function CardHeader({ children }: { children: React.ReactNode }) {
return <div className="card-header">{children}</div>
}
export function CardBody({ children }: { children: React.ReactNode }) {
return <div className="card-body">{children}</div>
}
// 用法
<Card>
<CardHeader>Title</CardHeader>
<CardBody>Content</CardBody>
</Card>
复合组件 (Compound Components)
interface TabsContextValue {
activeTab: string
setActiveTab: (tab: string) => void
}
const TabsContext = createContext<TabsContextValue | undefined>(undefined)
export function Tabs({ children, defaultTab }: {
children: React.ReactNode
defaultTab: string
}) {
const [activeTab, setActiveTab] = useState(defaultTab)
return (
<TabsContext.Provider value={{ activeTab, setActiveTab }}>
{children}
</TabsContext.Provider>
)
}
export function TabList({ children }: { children: React.ReactNode }) {
return <div className="tab-list">{children}</div>
}
export function Tab({ id, children }: { id: string, children: React.ReactNode }) {
const context = useContext(TabsContext)
if (!context) throw new Error('Tab must be used within Tabs')
return (
<button
className={context.activeTab === id ? 'active' : ''}
onClick={() => context.setActiveTab(id)}
>
{children}
</button>
)
}
// 用法
<Tabs defaultTab="overview">
<TabList>
<Tab id="overview">Overview</Tab>
<Tab id="details">Details</Tab>
</TabList>
</Tabs>


