Home Blog Work

React Hooks: A Guide to State Management and Side Effects

Published on July 24, 2021

In this blog post, we will be exploring React Hooks and how they can be used to manage state and side effects in React components. We will start with the basics and then move on to more advanced topics.

What is a React Hook?

A React Hook is a function that allows you to use state and other features of React within functional components. In other words, it’s a way to extract logic from components and reuse it across your application.

State Management with React Hooks

React Hooks provide a simple and effective way to manage state in your React applications. You can use the useState hook to create a state variable, and then update its value by calling the setter function returned from the hook. Here’s an example:

import { useState } from 'react';

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

  return (
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
      <button onClick={() => setCount(count - 1)}>Decrement</button>

In this example, we’re using the useState hook to create a state variable called count with an initial value of 0. We’re also returning a setter function from the hook that allows us to update the count state variable. When the user clicks on either of the buttons, the setCount function is called with the appropriate new value (either count + 1 or count - 1).

Side Effects with React Hooks

React Hooks also provide a simple way to handle side effects in your components. You can use the useEffect hook to perform any side effect that needs to be done when certain conditions are met, such as when the component mounts or when some other state changes. Here’s an example:

import { useState, useEffect } from 'react';

function FetchData() {
  const [data, setData] = useState(null);

  useEffect(() => {
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
      {data ? <p>Received data:</p> : <p>Loading...</p>}
      {data && <pre>{JSON.stringify(data, null, 2)}</pre>}

In this example, we’re using the useEffect hook to fetch some data from an API when the component mounts. The useState hook is used to store the fetched data in a state variable called data. When the data is received, it’s displayed as a JSON object.

Advanced React Hooks Topics

React Hooks provide many other features and use cases that you can explore further. Here are a few advanced topics to consider:

  1. Custom Hooks - You can create your own custom hooks to reuse state management or side effect logic across multiple components. For example, you could create a custom useAsync hook that handles asynchronous data fetching and caching for you.
  2. Dependency Arrays - When using the useEffect hook, you need to provide a dependency array that specifies which state variables the hook should be triggered on. This allows you to control when the side effect is executed based on changes to specific state variables.
  3. Async/Await in React Hooks - You can use async/await syntax within your React components using the useCallback and useMemo hooks, which allow you to write asynchronous code that looks like synchronous code.
  4. Error Handling with React Hooks - You can use the useErrorBoundary hook to catch errors in your components and provide a fallback UI when an error occurs. This allows you to gracefully handle errors without crashing your application.


React Hooks are a powerful way to manage state and side effects in React applications. By using these hooks, you can extract logic from components and reuse it across your application. With React Hooks, you can simplify your codebase and make it more maintainable and scalable.