react-component-dev
1
总安装量
1
周安装量
#48875
全站排名
安装命令
npx skills add https://github.com/corvo007/miosub --skill react-component-dev
Agent 安装分布
opencode
1
claude-code
1
Skill 文档
React Component Development Guidelines
Purpose
Establish consistency and best practices for React components in Gemini-Subtitle-Pro using React 19, TypeScript 5.8, and TailwindCSS 4.
When to Use This Skill
Automatically activates when working on:
- Creating or modifying React components
- Building pages, modals, dialogs, forms
- Styling with TailwindCSS
- Working with React hooks
- Implementing state management
- Performance optimization
Quick Start
New Component Checklist
- Location: Place in
src/components/[feature]/ - TypeScript: Define proper props interface
- Styling: Use TailwindCSS with
clsxandtw-merge - Path Aliases: Use
@components/*,@hooks/*, etc. - State: Use appropriate state pattern (local, context, etc.)
- i18n: Use
useTranslationfor all user-facing text
Component Architecture
File Organization
src/components/
âââ common/ # Shared components (Button, Modal, etc.)
âââ layout/ # Layout components (Header, Sidebar, etc.)
âââ subtitle/ # Subtitle-related components
âââ settings/ # Settings components
âââ workspace/ # Workspace components
âââ [feature]/ # Feature-specific components
Naming Conventions
- Components:
PascalCase–SubtitleEditor.tsx - Hooks:
camelCasewithuseprefix –useSubtitleParser.ts - Utils:
camelCase–formatTimestamp.ts
Core Principles
1. Always Use Path Aliases
// â NEVER: Relative paths
import { Button } from '../../components/common/Button';
// â
ALWAYS: Path aliases
import { Button } from '@components/common/Button';
import { useWorkspace } from '@hooks/useWorkspace';
import { SubtitleEntry } from '@types/subtitle';
2. Define Props Interface
// â
ALWAYS: Clear prop types
interface SubtitleEditorProps {
entries: SubtitleEntry[];
onUpdate: (index: number, entry: SubtitleEntry) => void;
isReadOnly?: boolean;
}
export function SubtitleEditor({ entries, onUpdate, isReadOnly = false }: SubtitleEditorProps) {
// ...
}
3. Use TailwindCSS with clsx
import { clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
// â
Conditional classes
<div className={twMerge(clsx(
'rounded-lg p-4',
isActive && 'bg-blue-500 text-white',
isDisabled && 'opacity-50 cursor-not-allowed'
))}>
4. Use i18n for All Text
import { useTranslation } from 'react-i18next';
export function SettingsPanel() {
const { t } = useTranslation();
return (
<h1>{t('settings.title')}</h1>
);
}
Resource Files
For detailed guidelines, see the resources directory:
- component-patterns.md – Component design patterns
- styling-guide.md – TailwindCSS styling patterns
- hooks-patterns.md – Custom hooks patterns
- performance.md – Performance optimization