React Component Generator
This skill provides templates and best practices for generating high-quality React components using TypeScript, Tailwind CSS, and Zustand for state management.
Purpose
Generate production-ready React components that follow industry best practices and maintain consistency across the codebase. The skill includes pre-built templates for common component patterns and comprehensive best practices documentation.
When to Use This Skill
Use this skill when:
- The user requests creating a new React component
- The user asks for UI elements like forms, buttons, cards, lists, or modals
- The user mentions component generation or scaffolding
- The user needs a component with Zustand state management
- The user wants to follow React best practices
Available Component Templates
The skill provides the following templates in the assets/ directory:
1. BasicComponent.tsx
A simple presentational component template for UI elements without complex state.
When to use:
- Simple UI elements (headers, footers, containers)
- Presentational components that receive data via props
- Reusable layout components
Key features:
- TypeScript interface for props
- JSDoc documentation
- Tailwind CSS styling
- Children support
2. StatefulComponent.tsx
A component with integrated Zustand store for state management.
When to use:
- Components requiring complex local state
- Components with multiple related state values
- Components with state that might be shared across instances
- Components with async operations
Key features:
- Complete Zustand store setup
- State and actions separation
- TypeScript interfaces for store
- Loading state handling
3. FormComponent.tsx
A form component with validation, error handling, and submission logic.
When to use:
- Login/registration forms
- Contact forms
- Data entry forms
- Any form with validation requirements
Key features:
- Built-in validation logic
- Error state management
- Form submission handling
- Accessible form inputs with labels
- Loading state during submission
4. ListComponent.tsx
A reusable list component for displaying collections of items.
When to use:
- Todo lists
- User lists
- Product catalogs
- Any itemized data display
Key features:
- Generic item type support
- Item click handlers
- Delete functionality
- Empty state handling
- Responsive design
5. CardComponent.tsx
A flexible card component for content display.
When to use:
- Product cards
- User profile cards
- Content previews
- Dashboard widgets
Key features:
- Optional image section
- Header and footer sections
- Click handling
- Flexible content area
6. ButtonComponent.tsx
A versatile button component with multiple variants and states.
When to use:
- Any button needs in the application
- Call-to-action buttons
- Form submission buttons
- Action buttons
Key features:
- Multiple variants (primary, secondary, danger, success, outline)
- Multiple sizes (sm, md, lg)
- Loading state with spinner
- Disabled state
- Full-width option
7. ModalComponent.tsx
A modal/dialog component with backdrop and accessibility features.
When to use:
- Confirmation dialogs
- Content detail views
- Settings panels
- Any overlay UI
Key features:
- ESC key handling
- Backdrop click to close
- Body scroll prevention
- Multiple sizes
- Accessible markup
How to Use Templates
When generating a component:
-
Identify the component type - Determine which template best fits the user's requirements.
-
Read the appropriate template - Load the template file from the
assets/directory:Read assets/BasicComponent.tsx -
Customize the template - Replace placeholder names and add specific functionality:
- Replace
ComponentNamewith the actual component name (PascalCase) - Update the interface name from
ComponentNamePropsto match - If using Zustand, update
useComponentNameStoreto match - Modify props to match requirements
- Adjust Tailwind classes for styling
- Add or remove features as needed
- Replace
-
Follow naming conventions - Refer to
references/best-practices.mdfor:- Component naming (PascalCase)
- Props interface naming (ComponentName + "Props")
- Store naming (use + ComponentName + "Store")
- File organization
-
Apply best practices - Consult
references/best-practices.mdfor guidance on:- TypeScript patterns
- Zustand store structure
- Tailwind CSS class organization
- Accessibility requirements
- Performance optimization
- Error handling
Component Naming Guidelines
Apply these naming rules when generating components:
-
Component name: Use PascalCase based on the user's description
- "login form" →
LoginForm - "user profile card" →
UserProfileCard - "data table" →
DataTable
- "login form" →
-
Props interface: ComponentName + "Props"
LoginForm→LoginFormPropsUserProfileCard→UserProfileCardProps
-
Zustand store: "use" + ComponentName + "Store"
LoginForm→useLoginFormStoreDataTable→useDataTableStore
-
File name: Match the component name exactly
LoginForm→LoginForm.tsxUserProfileCard→UserProfileCard.tsx
Best Practices Reference
For detailed guidance, consult references/best-practices.md which covers:
- Component structure and file organization
- TypeScript best practices
- Zustand state management patterns
- Tailwind CSS organization and responsive design
- Component composition patterns
- Event handler naming
- Performance optimization (memoization, lazy loading)
- Accessibility (semantic HTML, ARIA, keyboard navigation)
- Error handling and boundaries
- Testing considerations
Example Workflow
User request: "Create a user login form component"
Steps:
- Identify that this requires a form component
- Read
assets/FormComponent.tsxtemplate - Customize for login use case:
- Rename to
LoginForm - Update
LoginFormPropsinterface - Modify form fields (username/email, password)
- Add appropriate validation
- Update styling with Tailwind classes
- Rename to
- Place in appropriate directory (e.g.,
components/auth/LoginForm.tsx) - Verify accessibility and best practices
User request: "Create a product card with image and price"
Steps:
- Identify that this requires a card component
- Read
assets/CardComponent.tsxtemplate - Customize for product use case:
- Rename to
ProductCard - Update
ProductCardPropsto include price, product details - Adjust image section for product photos
- Add price display in content or footer
- Style with Tailwind for product display
- Rename to
- Place in
components/products/ProductCard.tsx
User request: "Create a todo list with Zustand"
Steps:
- Identify that this requires a stateful list component
- Read both
assets/StatefulComponent.tsxandassets/ListComponent.tsx - Combine patterns:
- Create Zustand store for todo state management
- Use list display pattern for rendering todos
- Add todo-specific actions (add, toggle, delete)
- Integrate form for adding new todos
- Name as
TodoListwithuseTodoListStore - Place in
components/todos/TodoList.tsx
Notes
- Always use TypeScript with proper type definitions
- Follow Tailwind's mobile-first responsive design approach
- Include proper JSDoc comments for better IDE support
- Ensure components are accessible (ARIA labels, keyboard navigation)
- Consider performance (memoization for expensive operations)
- Keep components focused and composable
- Export both named and default exports for flexibility