React5 min read
React Custom Hooks
Create reusable custom hooks to share logic across components.
Sarah Johnson
December 20, 2025
0.0k0
Custom hooks let you reuse logic across components.
Creating Custom Hook
Custom hooks start with "use":
function useCounter(initialValue = 0) {
const [count, setCount] = useState(initialValue);
const increment = () => setCount(count + 1);
const decrement = () => setCount(count - 1);
const reset = () => setCount(initialValue);
return { count, increment, decrement, reset };
}
Using Custom Hook
function App() {
const { count, increment, decrement, reset } = useCounter(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
<button onClick={decrement}>-</button>
<button onClick={reset}>Reset</button>
</div>
);
}
useFetch Hook
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch(url)
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
});
}, [url]);
return { data, loading };
}
Using it:
function Users() {
const { data, loading } = useFetch('/api/users');
if (loading) return <p>Loading...</p>;
return <div>{data.map(user => <p>{user.name}</p>)}</div>;
}
useLocalStorage Hook
function useLocalStorage(key, initialValue) {
const [value, setValue] = useState(() => {
const saved = localStorage.getItem(key);
return saved || initialValue;
});
useEffect(() => {
localStorage.setItem(key, value);
}, [key, value]);
return [value, setValue];
}
Remember
- Hook names start with "use"
- Can use other hooks inside
- Reuse logic easily
- Keep them simple
Next: Learn React Router!
#React#Hooks#Custom Hooks#Intermediate