🔹 Definition: Context API manages global state and avoids prop drilling.


1️⃣ Create Context

const MyContext = createContext(defaultValue);

2️⃣ Provide Context

<MyContext.Provider value={sharedData}>
  <App />
MyContext.Provider>

3️⃣ Consume Context

  • ✅ With useContext (Functional Components)
const value = useContext(MyContext);
  • ✅ With Context.Consumer (For Class Components)
<MyContext.Consumer>
  {value => <div>{value}div>}
MyContext.Consumer>

🚀 Example (Sidebar Context)

"use client";

import { useIsMobile } from "@/hooks/use-mobile";
import { createContext, useContext, useEffect, useState } from "react";

type SidebarState = "expanded" | "collapsed";

type SidebarContextType = {
  state: SidebarState;
  isOpen: boolean;
  setIsOpen: (open: boolean) => void;
  isMobile: boolean;
  toggleSidebar: () => void;
};

const SidebarContext = createContext<SidebarContextType | null>(null);

export function useSidebarContext() {
  const context = useContext(SidebarContext);
  if (!context) {
    throw new Error("useSidebarContext must be used within a SidebarProvider");
  }
  return context;
}

export function SidebarProvider({
  children,
  defaultOpen = true,
}: {
  children: React.ReactNode;
  defaultOpen?: boolean;
}) {
  const [isOpen, setIsOpen] = useState(defaultOpen);
  const isMobile = useIsMobile();

  useEffect(() => {
    if (isMobile) {
      setIsOpen(false);
    } else {
      setIsOpen(true);
    }
  }, [isMobile]);

  function toggleSidebar() {
    setIsOpen((prev) => !prev);
  }

  return (
    <SidebarContext.Provider
      value={{
        state: isOpen ? "expanded" : "collapsed",
        isOpen,
        setIsOpen,
        isMobile,
        toggleSidebar,
      }}
    >
      {children}
    SidebarContext.Provider>
  );
}

⚡ Best Practices

  • ✅ Use multiple contexts for modularity.
  • ✅ Combine with useReducer for complex state.
  • ✅ Wrap context logic in a custom hook for cleaner code.
const useMyContext = () => useContext(MyContext);

🚀 Use Context for: Theme, Auth, Language, Global State.