Last updated
React Component Generator Examples
The React Component Generator creates boilerplate code for React components, reducing repetitive setup work. Below are examples of generated components for common patterns.
Basic Functional Component (JavaScript)
Generate a simple functional component:
import React from 'react';
const Button = ({ label, onClick, disabled }) => {
return (
<button onClick={onClick} disabled={disabled}>
{label}
</button>
);
};
Button.defaultProps = {
disabled: false,
};
export default Button;
Functional Component with TypeScript
Generate a TypeScript component with a props interface:
import React from 'react';
interface ButtonProps {
label: string;
onClick: () => void;
disabled?: boolean;
variant?: 'primary' | 'secondary' | 'danger';
}
const Button: React.FC<ButtonProps> = ({
label,
onClick,
disabled = false,
variant = 'primary',
}) => {
return (
<button
onClick={onClick}
disabled={disabled}
className={`btn btn-${variant}`}
>
{label}
</button>
);
};
export default Button;
Component with useState and useEffect
Generate a component with state and side effects:
import React, { useState, useEffect } from 'react';
interface UserCardProps {
userId: string;
}
const UserCard: React.FC<UserCardProps> = ({ userId }) => {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const fetchUser = async () => {
try {
setLoading(true);
const response = await fetch(`/api/users/${userId}`);
const data = await response.json();
setUser(data);
} catch (err) {
setError('Failed to load user');
} finally {
setLoading(false);
}
};
fetchUser();
}, [userId]);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
if (!user) return null;
return (
<div className="user-card">
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
};
export default UserCard;
Form Component with Controlled Inputs
Generate a controlled form component:
import React, { useState } from 'react';
interface LoginFormProps {
onSubmit: (email: string, password: string) => void;
}
const LoginForm: React.FC<LoginFormProps> = ({ onSubmit }) => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
onSubmit(email, password);
};
return (
<form onSubmit={handleSubmit}>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="Email"
/>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="Password"
/>
<button type="submit">Login</button>
</form>
);
};
export default LoginForm;
List Component with Map Rendering
Generate a list component with proper key props:
import React from 'react';
interface Item {
id: string;
name: string;
}
interface ItemListProps {
items: Item[];
onSelect: (id: string) => void;
}
const ItemList: React.FC<ItemListProps> = ({ items, onSelect }) => {
return (
<ul>
{items.map((item) => (
<li key={item.id} onClick={() => onSelect(item.id)}>
{item.name}
</li>
))}
</ul>
);
};
export default ItemList;
Custom Hook
Generate a reusable custom hook for data fetching:
import { useState, useEffect } from 'react';
interface UseFetchResult<T> {
data: T | null;
loading: boolean;
error: string | null;
}
function useFetch<T>(url: string): UseFetchResult<T> {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const fetchData = async () => {
try {
setLoading(true);
const response = await fetch(url);
const result = await response.json();
setData(result);
} catch (err) {
setError('Fetch failed');
} finally {
setLoading(false);
}
};
fetchData();
}, [url]);
return { data, loading, error };
}
export default useFetch;
Context Provider
Generate a React Context with provider and consumer hook:
import React, { createContext, useContext, useState } from 'react';
interface AuthContextType {
user: User | null;
login: (user: User) => void;
logout: () => void;
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [user, setUser] = useState<User | null>(null);
const login = (user: User) => setUser(user);
const logout = () => setUser(null);
return (
<AuthContext.Provider value={{ user, login, logout }}>
{children}
</AuthContext.Provider>
);
};
export const useAuth = (): AuthContextType => {
const context = useContext(AuthContext);
if (!context) throw new Error('useAuth must be used within AuthProvider');
return context;
};
React Testing Library Test
Generated test boilerplate for the Button component:
import { render, screen, fireEvent } from '@testing-library/react';
import Button from './Button';
describe('Button', () => {
it('renders the label', () => {
render(<Button label="Click me" onClick={() => {}} />);
expect(screen.getByText('Click me')).toBeInTheDocument();
});
it('calls onClick when clicked', () => {
const handleClick = jest.fn();
render(<Button label="Click me" onClick={handleClick} />);
fireEvent.click(screen.getByText('Click me'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('is disabled when disabled prop is true', () => {
render(<Button label="Click me" onClick={() => {}} disabled />);
expect(screen.getByRole('button')).toBeDisabled();
});
});
Storybook Story
Generated Storybook story for the Button component:
import type { Meta, StoryObj } from '@storybook/react';
import Button from './Button';
const meta: Meta<typeof Button> = {
title: 'Components/Button',
component: Button,
};
export default meta;
type Story = StoryObj<typeof Button>;
export const Primary: Story = {
args: { label: 'Primary Button', variant: 'primary' },
};
export const Disabled: Story = {
args: { label: 'Disabled Button', disabled: true },
};
- Generate functional or class components
- Full TypeScript support with props interfaces
- Templates for forms, lists, modals, and data-fetching components
- Custom hook generation with correct naming conventions
- Context provider with consumer hook boilerplate
- React Testing Library test files generated alongside components
- Storybook story generation for component documentation
- CSS modules, styled-components, and Tailwind styling integration