Create Global Loading State in React 2025

🌐 Create Global Loading State in React 2025

🔍 Why Use a Global Loading State?

In large React apps, you may fetch data in many components. Instead of adding a separate loading state in each one, you can manage a global loading state using Context API and useReducer.

⚙️ Step-by-Step Guide

1. Create a Context


import { createContext, useContext, useReducer } from 'react';

const LoadingContext = createContext();

const initialState = { loading: false };

const loadingReducer = (state, action) => {
  switch (action.type) {
    case 'START_LOADING':
      return { loading: true };
    case 'STOP_LOADING':
      return { loading: false };
    default:
      return state;
  }
};

export const LoadingProvider = ({ children }) => {
  const [state, dispatch] = useReducer(loadingReducer, initialState);

  return (
    
      {children}
    
  );
};

export const useLoading = () => useContext(LoadingContext);
  

2. Wrap Your App with Provider


import { LoadingProvider } from './LoadingContext';
import App from './App';

const Root = () => (
  
    
  
);

export default Root;
  

3. Use Global Loading in Any Component


import { useLoading } from './LoadingContext';

const SomeComponent = () => {
  const { loading, dispatch } = useLoading();

  const fetchData = async () => {
    dispatch({ type: 'START_LOADING' });
    const res = await fetch('https://pokeapi.co/api/v2/pokemon');
    const data = await res.json();
    dispatch({ type: 'STOP_LOADING' });
  };

  return (
    
{loading ?

Loading...

: }
); };

✅ Benefits

  • Centralized loading control
  • No duplication across components
  • Cleaner UI logic