React Hooks (Up to React 19)

A Complete Guide to React Hooks (Up to React 19)

🪝 A Complete Guide to React Hooks (Up to React 19)

React Hooks, introduced in React 16.8, revolutionized the way we build React applications. They allow developers to manage state, side effects, context, and more inside functional components—eliminating the need for bulky class components.

Over time, React introduced new hooks in v18 and v19, making app development more powerful, efficient, and developer-friendly.

In this guide, we’ll walk through all React Hooks, grouped by their version, with clear explanations and code examples.


🔹 1. Basic Hooks (React 16.8+)

1. useState

Adds state to a functional component.

const [count, setCount] = useState(0);

2. useEffect

Handles side effects (API calls, event listeners, DOM updates).

useEffect(() => {
  document.title = `Count: ${count}`;
}, [count]);

3. useContext

Consumes React Context without needing a Consumer wrapper.

const theme = useContext(ThemeContext);

🔹 2. Additional Hooks (React 16.8+)

4. useReducer

An alternative to useState for complex state logic.

const [state, dispatch] = useReducer(reducer, initialState);

5. useCallback

Memoizes a function to prevent unnecessary re-creation.

const memoizedFn = useCallback(() => {
  doSomething(a, b);
}, [a, b]);

6. useMemo

Memoizes the result of expensive computations.

const result = useMemo(() => computeExpensiveValue(a, b), [a, b]);

7. useRef

Holds a mutable reference across renders (commonly for DOM access).

const inputRef = useRef(null);

8. useImperativeHandle

Customizes what gets exposed via ref in a component.

useImperativeHandle(ref, () => ({
  focus: () => inputRef.current.focus()
}));

9. useLayoutEffect

Runs synchronously after DOM updates—useful for layout measurements.

10. useDebugValue

Displays custom labels for hooks inside React DevTools.

useDebugValue(isOnline ? "Online" : "Offline");

🔹 3. React 18 Hooks (Concurrent Features)

11. useTransition

Keeps UI responsive by marking updates as non-urgent.

const [isPending, startTransition] = useTransition();

12. useDeferredValue

Defers updating a value until urgent renders finish.

const deferredSearch = useDeferredValue(search);

13. useId

Generates unique, hydration-safe IDs.

const id = useId();

14. useSyncExternalStore

Standard way to subscribe to external stores like Redux.

const state = useSyncExternalStore(subscribe, getSnapshot);

15. useInsertionEffect

Runs before DOM mutations. Useful for injecting styles.


🔹 4. React 19 Hooks (Async & Forms)

16. use

Lets components directly await promises or read contexts.

const data = use(fetchData());

17. useFormStatus

Provides form submission status (pending, success, error).

const { pending } = useFormStatus();

18. useFormState

Subscribes to form state returned by actions (errors, validations).

19. useOptimistic

Enables optimistic UI updates before the server confirms.

const [optimisticTodos, addOptimisticTodo] = useOptimistic(todos);

📋 React Hooks Cheat Sheet

Hook Purpose Version
useStateState in functional components16.8
useEffectSide effects (API, DOM, subscriptions)16.8
useContextConsume context16.8
useReducerComplex state logic16.8
useCallbackMemoize functions16.8
useMemoMemoize values16.8
useRefPersistent references / DOM access16.8
useImperativeHandleCustomize ref handling16.8
useLayoutEffectSync effects after DOM updates16.8
useDebugValueDebugging custom hooks16.8
useTransitionNon-urgent updates18
useDeferredValueDefer value rendering18
useIdUnique IDs18
useSyncExternalStoreSubscribe to external stores18
useInsertionEffectInject styles before DOM mutation18
useAwait promises inside components19
useFormStatusForm submission status19
useFormStateForm state & errors19
useOptimisticOptimistic UI updates19

🎯 Final Thoughts

From useState and useEffect in React 16.8 to async hooks like use and useOptimistic in React 19, hooks have transformed React development.

Mastering these hooks ensures you can build scalable, performant, and modern applications.

Post a Comment

Previous Post Next Post