useState Hook
The useState hook is used in React functional components to store and manage data (state) that changes over time.
In simple words:
It helps your component remember values and update the UI when they change.
Why use useState?
To store dynamic data (like count, input, toggle)
To update UI automatically when data changes
To manage user interaction
const [state, setState] = useState(initialValue);state→ current valuesetState→ function to update valueinitialValue→ starting value
How useState Works
Step 1: Initialize state
const [count, setCount] = useState(0);Step 2: React remembers state
Even after re-render, value stays updated
Step 3: Update state
setCount(count + 1);Step 4: Component re-renders
UI updates automatically
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0);
function handleClick() {
setCount(count + 1);
}
return (
<button onClick={handleClick}>
Click {count} me
</button>
);
}useState(0) → initial value is 0setCount(count + 1) → increment value
UI updates automatically
import React, { useState } from 'react';
function Form() {
const [name, setName] = useState('');
const [age, setAge] = useState('');
const [submitted, setSubmitted] = useState(false);
const handleSubmit = () => {
setSubmitted(true);
};
return (
<div>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="Enter your name"
/>
<input
type="number"
value={age}
onChange={(e) => setAge(e.target.value)}
placeholder="Enter your age"
/>
<button onClick={handleSubmit}>Submit</button>
{submitted && <p>Form Submitted!</p>}
</div>
);
}
export default Form;useState('')→ empty initial valueonChange→ updates state dynamicallysubmitted→ controls UI rendering
Important Concepts
1. Functional Update (Important)
Use when state depends on previous value:
setCount(prevCount => prevCount + 1);2. State is Asynchronous
Updates are not immediate
React batches updates for performance
3. State Does Not Merge Automatically
❌ Wrong:
setState({ name: "Anil" });✅ Correct:
setState(prev => ({ ...prev, name: "Anil" }));4. Can Store Any Data Type
Number
String
Array
Object
Boolean
5. Lazy Initialization (Advanced)
const [count, setCount] = useState(() => computeValue());Runs only once (performance optimization)
6. No Re-render if Same Value
setValue(10); // no re-render if already 10When to Use useState
Use it when:
You need simple state
Data changes over time
UI depends on user interaction
Performance Tips
Use functional updates when needed
Avoid unnecessary re-renders
Use
useReducerfor complex logic
useStateis used for managing state in functional componentsIt returns value + update function
Updating state causes re-render
Best for simple and small state management