useState
is essential for managing state in React. This guide covers its use with primitives, objects, arrays, and computed values through practical examples.
🛠️ Understanding useState
The useState
hook is a fundamental tool for managing state in React components. It allows you to store and update values, triggering re-renders when state changes. Here’s a breakdown of common use cases.
Basic Syntax:
const [state, setState] = useState(initialValue);
state
: Current state valuesetState(newValue)
: Function to update the state and trigger re-renderinitialValue
: Default state value
Visualizing useEffect
1️⃣ Primitive State (Numbers, Strings, Booleans)
Counter (Numbers)
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
Toggle Button (Boolean)
function ThemeToggle() {
const [isDarkMode, setIsDarkMode] = useState(false);
return (
<button onClick={() => setIsDarkMode(!isDarkMode)}>
{isDarkMode ? "🌙 Dark Mode" : "☀️ Light Mode"}
</button>
);
}
Input Fields (Strings)
function InputField() {
const [username, setUsername] = useState("");
return (
<input
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
placeholder="Enter username"
/>
);
}
2️⃣ Object & Array State
Form State (Object)
function FormExample() {
const [form, setForm] = useState({ name: "", email: "" });
return (
<div>
<input
type="text"
value={form.name}
onChange={(e) => setForm({ ...form, name: e.target.value })}
placeholder="Name"
/>
<input
type="email"
value={form.email}
onChange={(e) => setForm({ ...form, email: e.target.value })}
placeholder="Email"
/>
</div>
);
}
To-Do List (Array)
function TodoList() {
const [todos, setTodos] = useState([{ id: 1, text: "Learn React", completed: false }]);
const addTodo = () => {
setTodos([...todos, { id: Date.now(), text: "New Task", completed: false }]);
};
return (
<div>
<ul>
{todos.map(todo => (
<li key={todo.id}>{todo.text}</li>
))}
</ul>
<button onClick={addTodo}>Add Task</button>
</div>
);
}
3️⃣ Derived & Computed State
Filtering & Sorting Data
function FilterList() {
const [query, setQuery] = useState("");
const items = ["Apple", "Banana", "Cherry", "Date"];
const filteredItems = items.filter(item => item.toLowerCase().includes(query.toLowerCase()));
return (
<div>
<input type="text" placeholder="Search..." onChange={(e) => setQuery(e.target.value)} />
<ul>
{filteredItems.map(item => <li key={item}>{item}</li>)}
</ul>
</div>
);
}
4️⃣ UI & Interaction State
Modals & Popups
function ModalExample() {
const [isOpen, setIsOpen] = useState(false);
return (
<div>
<button onClick={() => setIsOpen(true)}>Open Modal</button>
{isOpen && (
<div className="modal">
<p>Modal Content</p>
<button onClick={() => setIsOpen(false)}>Close</button>
</div>
)}
</div>
);
}
5️⃣ Performance & Optimization
Debounced State
function DebouncedSearch() {
const [query, setQuery] = useState("");
const [debouncedQuery, setDebouncedQuery] = useState("");
useEffect(() => {
const timeout = setTimeout(() => setDebouncedQuery(query), 500);
return () => clearTimeout(timeout);
}, [query]);
return (
<input type="text" onChange={(e) => setQuery(e.target.value)} placeholder="Debounced Search..." />
);
}
📈 Summary
Mastering useState
is essential for building interactive React applications. By structuring state into primitives, objects, computed values, UI state, and performance optimizations, you can create efficient and scalable applications.
Leave a Reply