react-development
Comprehensive React development with hooks, components, state management, context, effects, and performance optimization based on official React documentation
What this skill does
# React Development Skill
This skill provides comprehensive guidance for building modern React applications using hooks, components, state management, context, effects, and performance optimization techniques based on official React documentation from react.dev.
## When to Use This Skill
Use this skill when:
- Building single-page applications (SPAs) with React
- Creating reusable UI components and component libraries
- Managing complex application state with hooks and context
- Implementing forms, data fetching, and side effects
- Optimizing React application performance
- Building interactive user interfaces with dynamic data
- Migrating class components to functional components with hooks
- Implementing global state management without external libraries
- Creating custom hooks for reusable logic
- Building accessible and performant web applications
## Core Concepts
### Components
Components are the building blocks of React applications. They let you split the UI into independent, reusable pieces.
**Functional Components (Modern Approach):**
```jsx
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// Arrow function syntax
const Greeting = ({ name, age }) => {
return (
<div>
<h2>{name}</h2>
<p>Age: {age}</p>
</div>
);
};
```
**Component Composition:**
```jsx
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
```
### JSX
JSX is a syntax extension for JavaScript that looks similar to HTML. It produces React elements.
**JSX Fundamentals:**
```jsx
// Embedding expressions
const name = 'Josh Perez';
const element = <h1>Hello, {name}</h1>;
// JSX attributes
const image = <img src={user.avatarUrl} alt={user.name} />;
// JSX children
const container = (
<div>
<h1>Welcome</h1>
<p>Get started with React</p>
</div>
);
// Conditional rendering
const greeting = (
<div>
{isLoggedIn ? <UserGreeting /> : <GuestGreeting />}
</div>
);
// Lists and keys
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li key={number.toString()}>{number}</li>
);
```
### Props
Props are arguments passed into React components. They are passed to components via HTML attributes.
**Passing and Using Props:**
```jsx
function Product({ name, price, inStock }) {
return (
<div className="product">
<h3>{name}</h3>
<p>${price}</p>
{inStock ? <span>In Stock</span> : <span>Out of Stock</span>}
</div>
);
}
// Usage
<Product name="Laptop" price={999} inStock={true} />
```
**Props with Children:**
```jsx
function Card({ title, children }) {
return (
<div className="card">
<h2>{title}</h2>
<div className="card-content">
{children}
</div>
</div>
);
}
// Usage
<Card title="Welcome">
<p>This is the card content</p>
<button>Click me</button>
</Card>
```
**Default Props:**
```jsx
function Button({ text = 'Click me', variant = 'primary' }) {
return <button className={variant}>{text}</button>;
}
```
### State
State is a component's memory. It lets components remember information and respond to user interactions.
**Local Component State:**
```jsx
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
<button onClick={() => setCount(count - 1)}>Decrement</button>
<button onClick={() => setCount(0)}>Reset</button>
</div>
);
}
```
## React Hooks
Hooks let you use state and other React features in functional components.
### useState
The useState hook lets you add state to functional components.
**Basic Usage:**
```jsx
import { useState } from 'react';
function Form() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
console.log({ name, email });
};
return (
<form onSubmit={handleSubmit}>
<input
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="Name"
/>
<input
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="Email"
type="email"
/>
<button type="submit">Submit</button>
</form>
);
}
```
**State with Objects:**
```jsx
function UserProfile() {
const [user, setUser] = useState({
name: '',
age: 0,
email: ''
});
const updateField = (field, value) => {
setUser(prev => ({
...prev,
[field]: value
}));
};
return (
<div>
<input
value={user.name}
onChange={(e) => updateField('name', e.target.value)}
/>
<input
type="number"
value={user.age}
onChange={(e) => updateField('age', parseInt(e.target.value))}
/>
<input
type="email"
value={user.email}
onChange={(e) => updateField('email', e.target.value)}
/>
</div>
);
}
```
**State with Arrays:**
```jsx
function TodoList() {
const [todos, setTodos] = useState([]);
const [input, setInput] = useState('');
const addTodo = () => {
setTodos(prev => [...prev, { id: Date.now(), text: input }]);
setInput('');
};
const removeTodo = (id) => {
setTodos(prev => prev.filter(todo => todo.id !== id));
};
return (
<div>
<input value={input} onChange={(e) => setInput(e.target.value)} />
<button onClick={addTodo}>Add</button>
<ul>
{todos.map(todo => (
<li key={todo.id}>
{todo.text}
<button onClick={() => removeTodo(todo.id)}>Delete</button>
</li>
))}
</ul>
</div>
);
}
```
### useEffect
The useEffect hook lets you perform side effects in functional components.
**Basic Side Effects:**
```jsx
import { useState, useEffect } from 'react';
function DocumentTitle() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);
return (
<button onClick={() => setCount(count + 1)}>
Clicked {count} times
</button>
);
}
```
**Data Fetching:**
```jsx
function UserData({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
let cancelled = false;
async function fetchUser() {
try {
setLoading(true);
const response = await fetch(`/api/users/${userId}`);
const data = await response.json();
if (!cancelled) {
setUser(data);
setError(null);
}
} catch (err) {
if (!cancelled) {
setError(err.message);
}
} finally {
if (!cancelled) {
setLoading(false);
}
}
}
fetchUser();
return () => {
cancelled = true;
};
}, [userId]);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
return <div>{user?.name}</div>;
}
```
**Event Listeners and Cleanup:**
```jsx
function WindowSize() {
const [size, setSize] = useState({
width: window.innerWidth,
height: window.innerHeight
});
useEffect(() => {
function handleResize() {
setSize({
width: window.innerWidth,
height: window.innerHeight
});
}
window.addEventListener('resize', handleResize);
// Cleanup function
return () => {
window.removeEventListener('resize', handleResize);
};
}, []); // Empty dependency array = run once on mount
return <div>{size.width} x {size.height}</div>;
}
```
**Timers and Intervals:**
```jsx
function Timer() {
const [seconds, setSeconds] = useState(0);
const [isRunning, setIsRunning] = useState(false);
useEffect(() => {
if (!isRunning) return;
const interval = setInterval(() => {
setSeconds(s => s +Related in frontend
angular-development
IncludedComprehensive Angular framework development covering components, directives, services, dependency injection, routing, and reactive programming based on official Angular documentation
javascript-fundamentals
IncludedCore JavaScript language features, patterns, and best practices including ES6+ syntax, async/await, closures, prototypes, and modern development patterns
nextjs-development
IncludedComprehensive Next.js development skill covering App Router, Server Components, data fetching, routing patterns, API routes, middleware, and full-stack Next.js applications
vuejs-development
IncludedComprehensive Vue.js development skill covering Composition API, reactivity system, components, directives, and modern Vue 3 patterns based on official Vue.js documentation
frontend-architecture
IncludedComponent architecture, design patterns, state management strategies, module systems, build tools, and scalable application structure
responsive-design
IncludedMobile-first responsive design covering fluid layouts, media queries, flexbox, grid, viewport units, and responsive images