useState – Basic State Management
Stores a value that persists across renders and updates when set.
import { useState } from "react"; const [count, setCount] = useState(0); // Example usage: setCount(count + 1); useReducer – Complex State Logic
Good for state with multiple related values or when using actions.
import { useReducer } from "react"; const reducer = (state, action) => { switch (action.type) { case "increment": return { count: state.count + 1 }; default: return state; } }; const [state, dispatch] = useReducer(reducer, { count: 0 }); // Example usage: dispatch({ type: "increment" }); useContext – Share Data Without Prop Drilling
Lets you access values from a parent provider anywhere in the tree.
import { createContext, useContext } from "react"; const UserContext = createContext(); const user = useContext(UserContext); // Access shared user data useEffect – Side Effects
Run code after render (e.g., API calls, subscriptions, DOM updates).
import { useEffect } from "react"; useEffect(() => { document.title = "My Page"; }, []); // Runs once on mount useRef – Persistent Values & DOM Access
Keeps a value across renders without causing re-renders.
import { useRef } from "react"; const inputRef = useRef(); <input ref={inputRef} />; useMemo – Cache Computations
Avoids recalculating expensive values unless dependencies change.
import { useMemo } from "react"; const total = useMemo(() => items.reduce((a, b) => a + b, 0), [items]); useCallback – Cache Functions
Prevents function re-creation unless dependencies change.
import { useCallback } from "react"; const handleClick = useCallback(() => { console.log("clicked"); }, []); useLayoutEffect – Before Paint Effects
Runs before the browser paints; useful to avoid flicker.
import { useLayoutEffect } from "react"; useLayoutEffect(() => { console.log("Runs before paint"); }, []); useSWR – Simple Data Fetching & Caching
import useSWR from "swr"; const fetcher = (url) => fetch(url).then(res => res.json()); const { data, error, isLoading } = useSWR("/api/user", fetcher); State Library Hooks – External State
For libraries like Redux or Jotai.
import { useSelector, useDispatch } from "react-redux"; const value = useSelector(state => state.value); const dispatch = useDispatch(); useNavigate – Page Navigation
(React Router)
import { useNavigate } from "react-router-dom"; const navigate = useNavigate(); navigate("/profile"); Utility Hooks
useBoolean – Easy Boolean State
const { value: isOpen, toggle, setFalse } = useBoolean(); useCopyToClipboard – Copy Text
const [copiedText, copy] = useCopyToClipboard(); copy("Hello World"); usePrevious – Track Previous Value
const prevCount = usePrevious(count); useDebounce – Delay State Updates
const [debouncedQuery] = useDebounce(query, 500); useMediaQuery – Match Screen Size
const isMobile = useMediaQuery("(max-width: 768px)"); useResizeObserver – Watch Element Size
const { width, height } = useResizeObserver({ ref }); useLocalStorage – Persist State in Browser
const [theme, setTheme] = useLocalStorage("theme", "light");
Top comments (0)