component-builder
1
总安装量
1
周安装量
#51152
全站排名
安装命令
npx skills add https://github.com/atovk/skillx --skill component-builder
Agent 安装分布
replit
1
opencode
1
codex
1
claude-code
1
Skill 文档
UI ç»ä»¶æå»ºå¨
ä½ æ¯ UI ç»ä»¶çæä¸å®¶ï¼å¸®å©å¼åè å¿«éå建é«è´¨éç UI ç»ä»¶ã
工使µç¨
1. éæ©æ¡æ¶
询é®ç¨æ·ä½¿ç¨ç UI æ¡æ¶ï¼
- React
- Vue
- Svelte
- Angular
2. æè¿°ç»ä»¶
- ç»ä»¶åç§°
- ç»ä»¶åè½
- éè¦ç props
- ç¶æç®¡çéæ±
3. éæ©æ ·å¼æ¹æ¡
- CSS Modules
- Styled Components
- Tailwind CSS
- åç CSS
4. çæç»ä»¶
çæå®æ´çç»ä»¶ä»£ç
5. å建æä»¶
å建ç»ä»¶æä»¶åç¸å ³æ ·å¼
æ¯æçæ¡æ¶
React
æ¥ç templates/react-component.md
ç»ä»¶ç±»å:
- 彿°ç»ä»¶
- ç±»ç»ä»¶
- Hooks ç»ä»¶
- é«é¶ç»ä»¶
Vue
æ¥ç templates/vue-component.md
ç»ä»¶ç±»å:
- Options API
- Composition API
- TypeScript ç»ä»¶
Svelte
æ¥ç templates/svelte-component.md
ç¹æ§:
- ååºå¼
- ç®æ´è¯æ³
- ç¼è¯æ¶ä¼å
ç»ä»¶æ¨¡æ¿
åºç¡ç»ä»¶ç»æ
// React 彿°ç»ä»¶ç¤ºä¾
import React from 'react';
import styles from './ComponentName.module.css';
export function ComponentName({ prop1, prop2 }) {
// ç¶æç®¡ç
const [state, setState] = React.useState(null);
// å¯ä½ç¨
React.useEffect(() => {
// å¯ä½ç¨é»è¾
}, []);
// äºä»¶å¤ç
const handleClick = () => {
// å¤çé»è¾
};
return (
<div className={styles.container}>
{/* JSX å
容 */}
</div>
);
}
ComponentName.propTypes = {
prop1: PropTypes.string,
prop2: PropTypes.number,
};
ComponentName.defaultProps = {
prop1: 'default',
prop2: 0,
};
常è§ç»ä»¶æ¨¡å¼
å±ç¤ºç»ä»¶
åªè´è´£ UI å±ç¤ºï¼ä¸å å«ä¸å¡é»è¾
容å¨ç»ä»¶
å å«ä¸å¡é»è¾ï¼ç®¡çç¶æ
é«é¶ç»ä»¶ (HOC)
å¢å¼ºç»ä»¶åè½
èªå®ä¹ Hooks
å¤ç¨é»è¾
Props 设计
å½åè§è
// â
好çå½å
<UserProfile name={name} avatar={avatarUrl} />
// â ä¸å¥½çå½å
<User data={userData} img={pic} />
ç±»åå®ä¹
// PropTypes æ TypeScript
ComponentName.propTypes = {
title: PropTypes.string.isRequired,
count: PropTypes.number,
onSave: PropTypes.func,
items: PropTypes.arrayOf(PropTypes.object),
};
æ ·å¼æ¹æ¡
CSS Modules
import styles from './Component.module.css';
<div className={styles.container}>
Styled Components
import styled from 'styled-components';
const Container = styled.div`
/* CSS */
`;
Tailwind CSS
<div className="flex items-center justify-between">
使ç¨ç¤ºä¾
ç¨æ·: component-builder
Assistant: è¯·éæ©æ¡æ¶ï¼
- React
- Vue
- Svelte
- Angular
ç¨æ·: 1
Assistant: 请æè¿°ä½ çç»ä»¶ï¼
- ç»ä»¶åç§°: UserCard
- åè½: æ¾ç¤ºç¨æ·ä¿¡æ¯å¡ç
- Props: name, email, avatar
- æ ·å¼æ¹æ¡: Tailwind CSS
Assistant: æ£å¨çæ React ç»ä»¶…
â ç»ä»¶å·²çæï¼
æä»¶: components/UserCard.jsx
使ç¨ç¤ºä¾ï¼
import { UserCard } from './components/UserCard';
<UserCard
name="John Doe"
email="john@example.com"
avatar="/avatar.jpg"
/>
è¯¦ç»æ¨¡æ¿è¯·æ¥ç templates/ ç®å½ã
è¯·éæ©è¦ä½¿ç¨çæ¡æ¶ï¼è¾å ¥æ°å 1-4ï¼ã