<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[useContext(React)]]></title><description><![CDATA[useContext(React)]]></description><link>https://usecontextreact.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 13:12:22 GMT</lastBuildDate><atom:link href="https://usecontextreact.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[useContext]]></title><description><![CDATA[Understanding useContext: React's "Pass Data Without Props" Hook
Hey! Today we'll learn about useContext - it's like creating a global announcement system for your React app where components can listen to important information without passing it thro...]]></description><link>https://usecontextreact.hashnode.dev/usecontext</link><guid isPermaLink="true">https://usecontextreact.hashnode.dev/usecontext</guid><category><![CDATA[useContext]]></category><category><![CDATA[React]]></category><category><![CDATA[ReactHooks]]></category><dc:creator><![CDATA[Pranshu Tiwari]]></dc:creator><pubDate>Thu, 29 Jan 2026 20:52:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769719891397/7b84e15d-4e65-4035-9553-d4a564a639ea.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-understanding-usecontext-reacts-pass-data-without-props-hook"><strong>Understanding useContext: React's "Pass Data Without Props" Hook</strong></h1>
<p>Hey! Today we'll learn about <code>useContext</code> - it's like <strong>creating a global announcement system</strong> for your React app where components can listen to important information without passing it through every level.</p>
<h2 id="heading-what-problem-does-usecontext-solve"><strong>What Problem Does useContext Solve?</strong></h2>
<p>Imagine you're passing a piece of data from a grandparent component to a great-grandchild component:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// ❌ The Prop Drilling Problem</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Grandparent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> theme = <span class="hljs-string">'dark'</span>;
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Parent</span> <span class="hljs-attr">theme</span>=<span class="hljs-string">{theme}</span> /&gt;</span></span>;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Parent</span>(<span class="hljs-params">{ theme }</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Child</span> <span class="hljs-attr">theme</span>=<span class="hljs-string">{theme}</span> /&gt;</span></span>;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Child</span>(<span class="hljs-params">{ theme }</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Grandchild</span> <span class="hljs-attr">theme</span>=<span class="hljs-string">{theme}</span> /&gt;</span></span>;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Grandchild</span>(<span class="hljs-params">{ theme }</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Theme is: {theme}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
}
</code></pre>
<p>That's <strong>prop drilling</strong> - passing props through components that don't need them just to reach a component that does.</p>
<p><code>useContext</code> fixes this!</p>
<h2 id="heading-the-basic-idea"><strong>The Basic Idea</strong></h2>
<p>Think of <code>useContext</code> like a <strong>radio broadcast</strong>:</p>
<ol>
<li><p><strong>Context.Provider</strong> = Radio station (broadcasts data)</p>
</li>
<li><p><strong>useContext()</strong> = Radio receiver (listens to data)</p>
</li>
<li><p>Any component can tune in to the broadcast, no matter where it is!</p>
</li>
</ol>
<h2 id="heading-three-simple-steps-to-use-context"><strong>Three Simple Steps to Use Context</strong></h2>
<h3 id="heading-step-1-create-the-context-the-radio-station"><strong>Step 1: Create the Context (The Radio Station)</strong></h3>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { createContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-comment">// Create the radio station</span>
<span class="hljs-keyword">const</span> ThemeContext = createContext(<span class="hljs-string">'light'</span>); <span class="hljs-comment">// Default value = 'light'</span>
<span class="hljs-comment">// This is like setting up a radio frequency</span>
</code></pre>
<h3 id="heading-step-2-provide-the-value-start-broadcasting"><strong>Step 2: Provide the Value (Start Broadcasting)</strong></h3>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [theme, setTheme] = useState(<span class="hljs-string">'dark'</span>);

  <span class="hljs-comment">// Wrap components that need this data in Provider</span>
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ThemeContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{theme}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Header</span> /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">MainContent</span> /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Footer</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ThemeContext.Provider</span>&gt;</span></span>
  );
}
<span class="hljs-comment">// Now everything inside can listen to the theme!</span>
</code></pre>
<h3 id="heading-step-3-consume-the-value-tune-in"><strong>Step 3: Consume the Value (Tune In)</strong></h3>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Header</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// Tune into the ThemeContext broadcast</span>
  <span class="hljs-keyword">const</span> theme = useContext(ThemeContext);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">header</span> <span class="hljs-attr">className</span>=<span class="hljs-string">{</span>`<span class="hljs-attr">header-</span>${<span class="hljs-attr">theme</span>}`}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>My App (Theme: {theme})<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">header</span>&gt;</span></span>
  );
}
<span class="hljs-comment">// No props needed! Header just "knows" the theme</span>
</code></pre>
<h2 id="heading-complete-real-example-theme-switcher"><strong>Complete Real Example: Theme Switcher</strong></h2>
<p>Let's build a complete theme switcher app:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { createContext, useState, useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-comment">// 1. CREATE Context (outside components)</span>
<span class="hljs-keyword">const</span> ThemeContext = createContext();
<span class="hljs-keyword">const</span> ThemeUpdateContext = createContext(); <span class="hljs-comment">// Another context for update function</span>

<span class="hljs-comment">// Custom hook for easy theme access</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useTheme</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> useContext(ThemeContext);
}

<span class="hljs-comment">// Custom hook for easy theme updates</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useThemeUpdate</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> useContext(ThemeUpdateContext);
}

<span class="hljs-comment">// 2. PROVIDER Component (wraps our app)</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ThemeProvider</span>(<span class="hljs-params">{ children }</span>) </span>{
  <span class="hljs-keyword">const</span> [theme, setTheme] = useState(<span class="hljs-string">'light'</span>);

  <span class="hljs-keyword">const</span> toggleTheme = <span class="hljs-function">() =&gt;</span> {
    setTheme(<span class="hljs-function"><span class="hljs-params">prevTheme</span> =&gt;</span> prevTheme === <span class="hljs-string">'light'</span> ? <span class="hljs-string">'dark'</span> : <span class="hljs-string">'light'</span>);
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ThemeContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{theme}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">ThemeUpdateContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{toggleTheme}</span>&gt;</span>
        {children}
      <span class="hljs-tag">&lt;/<span class="hljs-name">ThemeUpdateContext.Provider</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ThemeContext.Provider</span>&gt;</span></span>
  );
}

<span class="hljs-comment">// 3. COMPONENTS that use the context</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Header</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> theme = useTheme();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">header</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span>
      <span class="hljs-attr">background:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">fff</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">333</span>',
      <span class="hljs-attr">color:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">000</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">fff</span>',
      <span class="hljs-attr">padding:</span> '<span class="hljs-attr">20px</span>'
    }}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>My Website<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Current theme: {theme}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">header</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Content</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> theme = useTheme();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">main</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span>
      <span class="hljs-attr">background:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">f5f5f5</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">222</span>',
      <span class="hljs-attr">color:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">000</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">fff</span>',
      <span class="hljs-attr">padding:</span> '<span class="hljs-attr">20px</span>',
      <span class="hljs-attr">minHeight:</span> '<span class="hljs-attr">200px</span>'
    }}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>This is the main content area.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>It automatically uses the {theme} theme!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">main</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ThemeToggleButton</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> toggleTheme = useThemeUpdate();
  <span class="hljs-keyword">const</span> theme = useTheme();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> 
      <span class="hljs-attr">onClick</span>=<span class="hljs-string">{toggleTheme}</span>
      <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span>
        <span class="hljs-attr">padding:</span> '<span class="hljs-attr">10px</span> <span class="hljs-attr">20px</span>',
        <span class="hljs-attr">margin:</span> '<span class="hljs-attr">10px</span>',
        <span class="hljs-attr">background:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">333</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">fff</span>',
        <span class="hljs-attr">color:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">fff</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">333</span>'
      }}
    &gt;</span>
      Switch to {theme === 'light' ? 'Dark' : 'Light'} Mode
    <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>
  );
}

<span class="hljs-comment">// 4. PUT IT ALL TOGETHER</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ThemeProvider</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"App"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Header</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Content</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ThemeToggleButton</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Footer</span> /&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ThemeProvider</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Footer</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> theme = useTheme();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">footer</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span>
      <span class="hljs-attr">background:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">eee</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">111</span>',
      <span class="hljs-attr">color:</span> <span class="hljs-attr">theme</span> === <span class="hljs-string">'light'</span> ? '#<span class="hljs-attr">000</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">fff</span>',
      <span class="hljs-attr">padding:</span> '<span class="hljs-attr">10px</span>',
      <span class="hljs-attr">marginTop:</span> '<span class="hljs-attr">20px</span>'
    }}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Footer - Using {theme} theme<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">footer</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-multiple-contexts-example-user-cart"><strong>Multiple Contexts Example: User + Cart</strong></h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { createContext, useState, useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-comment">// Context 1: User Information</span>
<span class="hljs-keyword">const</span> UserContext = createContext();
<span class="hljs-comment">// Context 2: Shopping Cart</span>
<span class="hljs-keyword">const</span> CartContext = createContext();

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [user, setUser] = useState({
    <span class="hljs-attr">name</span>: <span class="hljs-string">'John Doe'</span>,
    <span class="hljs-attr">email</span>: <span class="hljs-string">'john@example.com'</span>,
    <span class="hljs-attr">isPremium</span>: <span class="hljs-literal">true</span>
  });

  <span class="hljs-keyword">const</span> [cart, setCart] = useState([
    { <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'iPhone'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">999</span> },
    { <span class="hljs-attr">id</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Headphones'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">199</span> }
  ]);

  <span class="hljs-keyword">const</span> addToCart = <span class="hljs-function">(<span class="hljs-params">product</span>) =&gt;</span> {
    setCart([...cart, product]);
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">UserContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{user}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">CartContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">cart</span>, <span class="hljs-attr">addToCart</span> }}&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Navbar</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Products</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Checkout</span> /&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">CartContext.Provider</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">UserContext.Provider</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Navbar</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> user = useContext(UserContext);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Welcome, {user.name}!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{user.isPremium ? '⭐ Premium User' : 'Free User'}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Products</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { addToCart } = useContext(CartContext);

  <span class="hljs-keyword">const</span> products = [
    { <span class="hljs-attr">id</span>: <span class="hljs-number">3</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Laptop'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">1299</span> },
    { <span class="hljs-attr">id</span>: <span class="hljs-number">4</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Tablet'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">599</span> }
  ];

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>Products<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
      {products.map(product =&gt; (
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{product.id}</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{border:</span> '<span class="hljs-attr">1px</span> <span class="hljs-attr">solid</span> #<span class="hljs-attr">ccc</span>', <span class="hljs-attr">padding:</span> '<span class="hljs-attr">10px</span>', <span class="hljs-attr">margin:</span> '<span class="hljs-attr">10px</span>'}}&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>{product.name}<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>${product.price}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> addToCart(product)}&gt;
            Add to Cart
          <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      ))}
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Checkout</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> user = useContext(UserContext);
  <span class="hljs-keyword">const</span> { cart } = useContext(CartContext);

  <span class="hljs-keyword">const</span> total = cart.reduce(<span class="hljs-function">(<span class="hljs-params">sum, item</span>) =&gt;</span> sum + item.price, <span class="hljs-number">0</span>);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>Checkout<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Customer: {user.email}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Cart Items:<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
      {cart.map(item =&gt; (
        <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{item.id}</span>&gt;</span>{item.name} - ${item.price}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      ))}

      <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Total: ${total}<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
      {user.isPremium &amp;&amp; <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Premium Discount Applied! Final: ${total * 0.9}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>}
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-dynamic-context-with-updates-example"><strong>Dynamic Context with Updates Example</strong></h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { createContext, useState, useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> SettingsContext = createContext();

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">SettingsProvider</span>(<span class="hljs-params">{ children }</span>) </span>{
  <span class="hljs-keyword">const</span> [settings, setSettings] = useState({
    <span class="hljs-attr">language</span>: <span class="hljs-string">'English'</span>,
    <span class="hljs-attr">fontSize</span>: <span class="hljs-number">16</span>,
    <span class="hljs-attr">notifications</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">darkMode</span>: <span class="hljs-literal">false</span>
  });

  <span class="hljs-keyword">const</span> updateSetting = <span class="hljs-function">(<span class="hljs-params">key, value</span>) =&gt;</span> {
    setSettings(<span class="hljs-function"><span class="hljs-params">prev</span> =&gt;</span> ({
      ...prev,
      [key]: value
    }));
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">SettingsContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">settings</span>, <span class="hljs-attr">updateSetting</span> }}&gt;</span>
      {children}
    <span class="hljs-tag">&lt;/<span class="hljs-name">SettingsContext.Provider</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">SettingsPanel</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { settings, updateSetting } = useContext(SettingsContext);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{border:</span> '<span class="hljs-attr">2px</span> <span class="hljs-attr">solid</span> #<span class="hljs-attr">666</span>', <span class="hljs-attr">padding:</span> '<span class="hljs-attr">20px</span>', <span class="hljs-attr">margin:</span> '<span class="hljs-attr">20px</span>'}}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>Settings Panel<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>Language: <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">select</span> 
          <span class="hljs-attr">value</span>=<span class="hljs-string">{settings.language}</span>
          <span class="hljs-attr">onChange</span>=<span class="hljs-string">{(e)</span> =&gt;</span> updateSetting('language', e.target.value)}
        &gt;
          <span class="hljs-tag">&lt;<span class="hljs-name">option</span>&gt;</span>English<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">option</span>&gt;</span>Spanish<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">option</span>&gt;</span>French<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">select</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>Font Size: {settings.fontSize}px <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span> 
          <span class="hljs-attr">type</span>=<span class="hljs-string">"range"</span> 
          <span class="hljs-attr">min</span>=<span class="hljs-string">"12"</span> 
          <span class="hljs-attr">max</span>=<span class="hljs-string">"24"</span> 
          <span class="hljs-attr">value</span>=<span class="hljs-string">{settings.fontSize}</span>
          <span class="hljs-attr">onChange</span>=<span class="hljs-string">{(e)</span> =&gt;</span> updateSetting('fontSize', parseInt(e.target.value))}
        /&gt;
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">input</span> 
            <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span>
            <span class="hljs-attr">checked</span>=<span class="hljs-string">{settings.notifications}</span>
            <span class="hljs-attr">onChange</span>=<span class="hljs-string">{(e)</span> =&gt;</span> updateSetting('notifications', e.target.checked)}
          /&gt;
          Enable Notifications
        <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">input</span> 
            <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span>
            <span class="hljs-attr">checked</span>=<span class="hljs-string">{settings.darkMode}</span>
            <span class="hljs-attr">onChange</span>=<span class="hljs-string">{(e)</span> =&gt;</span> updateSetting('darkMode', e.target.checked)}
          /&gt;
          Dark Mode
        <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">DisplayContent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { settings } = useContext(SettingsContext);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span>
      <span class="hljs-attr">background:</span> <span class="hljs-attr">settings.darkMode</span> ? '#<span class="hljs-attr">333</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">fff</span>',
      <span class="hljs-attr">color:</span> <span class="hljs-attr">settings.darkMode</span> ? '#<span class="hljs-attr">fff</span>' <span class="hljs-attr">:</span> '#<span class="hljs-attr">000</span>',
      <span class="hljs-attr">fontSize:</span> `${<span class="hljs-attr">settings.fontSize</span>}<span class="hljs-attr">px</span>`,
      <span class="hljs-attr">padding:</span> '<span class="hljs-attr">20px</span>',
      <span class="hljs-attr">margin:</span> '<span class="hljs-attr">20px</span>'
    }}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Content Display<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Current language: {settings.language}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Font size: {settings.fontSize}px<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Notifications: {settings.notifications ? 'ON' : 'OFF'}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>This text changes based on your settings!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">SettingsProvider</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>App Settings Demo<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">SettingsPanel</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DisplayContent</span> /&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">SettingsProvider</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-custom-hook-pattern-best-practice"><strong>Custom Hook Pattern (Best Practice)</strong></h2>
<pre><code class="lang-javascript"><span class="hljs-comment">// Create this in a separate file like 'AuthContext.js'</span>
<span class="hljs-keyword">import</span> React, { createContext, useState, useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> AuthContext = createContext();

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useAuth</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> context = useContext(AuthContext);
  <span class="hljs-keyword">if</span> (!context) {
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'useAuth must be used within AuthProvider'</span>);
  }
  <span class="hljs-keyword">return</span> context;
}

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">AuthProvider</span>(<span class="hljs-params">{ children }</span>) </span>{
  <span class="hljs-keyword">const</span> [user, setUser] = useState(<span class="hljs-literal">null</span>);
  <span class="hljs-keyword">const</span> [loading, setLoading] = useState(<span class="hljs-literal">false</span>);

  <span class="hljs-keyword">const</span> login = <span class="hljs-keyword">async</span> (email, password) =&gt; {
    setLoading(<span class="hljs-literal">true</span>);
    <span class="hljs-comment">// Simulate API call</span>
    <span class="hljs-built_in">setTimeout</span>(<span class="hljs-function">() =&gt;</span> {
      setUser({ email, <span class="hljs-attr">name</span>: <span class="hljs-string">'John Doe'</span>, <span class="hljs-attr">token</span>: <span class="hljs-string">'abc123'</span> });
      setLoading(<span class="hljs-literal">false</span>);
    }, <span class="hljs-number">1000</span>);
  };

  <span class="hljs-keyword">const</span> logout = <span class="hljs-function">() =&gt;</span> {
    setUser(<span class="hljs-literal">null</span>);
  };

  <span class="hljs-keyword">const</span> value = {
    user,
    login,
    logout,
    loading,
    <span class="hljs-attr">isAuthenticated</span>: !!user
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">AuthContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{value}</span>&gt;</span>
      {children}
    <span class="hljs-tag">&lt;/<span class="hljs-name">AuthContext.Provider</span>&gt;</span></span>
  );
}

<span class="hljs-comment">// In your components:</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">LoginButton</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { login, loading } = useAuth();

  <span class="hljs-keyword">const</span> handleLogin = <span class="hljs-function">() =&gt;</span> {
    login(<span class="hljs-string">'user@example.com'</span>, <span class="hljs-string">'password123'</span>);
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{handleLogin}</span> <span class="hljs-attr">disabled</span>=<span class="hljs-string">{loading}</span>&gt;</span>
      {loading ? 'Logging in...' : 'Login'}
    <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>
  );
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">UserProfile</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { user, logout } = useAuth();

  <span class="hljs-keyword">if</span> (!user) <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Please login<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Welcome, {user.name}!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{logout}</span>&gt;</span>Logout<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-when-to-use-usecontext"><strong>When to Use useContext?</strong></h2>
<p>✅ <strong>USE useContext when:</strong></p>
<ul>
<li><p>Multiple components need the same data</p>
</li>
<li><p>You're passing props through 3+ levels (prop drilling)</p>
</li>
<li><p>You have global data (theme, user auth, language)</p>
</li>
<li><p>Many components need to update the same state</p>
</li>
</ul>
<p>❌ <strong>DON'T use useContext for:</strong></p>
<ul>
<li><p>Data used by only parent-child components (just use props)</p>
</li>
<li><p>Data that changes very frequently (performance issues)</p>
</li>
<li><p>Simple state that's only used in one component</p>
</li>
</ul>
<h2 id="heading-common-mistakes"><strong>Common Mistakes</strong></h2>
<p><strong>Mistake 1: Forgetting the Provider</strong></p>
<pre><code class="lang-javascript"><span class="hljs-comment">// ❌ WRONG: Component outside Provider gets undefined</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Component</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> value = useContext(MyContext); <span class="hljs-comment">// value = undefined</span>
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{value}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
}

<span class="hljs-comment">// ✅ CORRECT: Wrap in Provider</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">MyContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"Hello"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Component</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">MyContext.Provider</span>&gt;</span></span>
  );
}
</code></pre>
<p><strong>Mistake 2: Unnecessary Rerenders</strong></p>
<pre><code class="lang-javascript"><span class="hljs-comment">// ❌ WRONG: New object every render causes rerenders</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [user, setUser] = useState({ <span class="hljs-attr">name</span>: <span class="hljs-string">'John'</span> });

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">UserContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">user</span>, <span class="hljs-attr">setUser</span> }}&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Child</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">UserContext.Provider</span>&gt;</span></span>
  );
  <span class="hljs-comment">// New {user, setUser} object every time = Child rerenders every time</span>
}

<span class="hljs-comment">// ✅ BETTER: Memoize the value</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [user, setUser] = useState({ <span class="hljs-attr">name</span>: <span class="hljs-string">'John'</span> });

  <span class="hljs-keyword">const</span> contextValue = useMemo(<span class="hljs-function">() =&gt;</span> ({ user, setUser }), [user]);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">UserContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{contextValue}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Child</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">UserContext.Provider</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-practice-exercise-build-a-notification-system"><strong>Practice Exercise: Build a Notification System</strong></h2>
<p>Create a notification system where:</p>
<ol>
<li><p>Any component can show notifications</p>
</li>
<li><p>A NotificationCenter component displays all notifications</p>
</li>
<li><p>Notifications auto-remove after 3 seconds</p>
</li>
</ol>
<pre><code class="lang-javascript"><span class="hljs-comment">// Try this structure:</span>
<span class="hljs-keyword">const</span> NotificationContext = createContext();

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">NotificationProvider</span>(<span class="hljs-params">{ children }</span>) </span>{
  <span class="hljs-keyword">const</span> [notifications, setNotifications] = useState([]);

  <span class="hljs-keyword">const</span> addNotification = <span class="hljs-function">(<span class="hljs-params">message</span>) =&gt;</span> {
    <span class="hljs-comment">// Your code here</span>
  };

  <span class="hljs-keyword">const</span> removeNotification = <span class="hljs-function">(<span class="hljs-params">id</span>) =&gt;</span> {
    <span class="hljs-comment">// Your code here</span>
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">NotificationContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">addNotification</span> }}&gt;</span>
      {children}
      <span class="hljs-tag">&lt;<span class="hljs-name">NotificationCenter</span> <span class="hljs-attr">notifications</span>=<span class="hljs-string">{notifications}</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">NotificationContext.Provider</span>&gt;</span></span>
  );
}

<span class="hljs-comment">// Then use in components:</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">AddToCartButton</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { addNotification } = useContext(NotificationContext);

  <span class="hljs-keyword">const</span> handleClick = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// Add item to cart</span>
    addNotification(<span class="hljs-string">'Item added to cart!'</span>);
  };

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{handleClick}</span>&gt;</span>Add to Cart<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>;
}
</code></pre>
<h2 id="heading-summary-cheat-sheet"><strong>Summary Cheat Sheet</strong></h2>
<pre><code class="lang-javascript"><span class="hljs-comment">// 1. CREATE context (usually in separate file)</span>
<span class="hljs-keyword">const</span> MyContext = createContext(defaultValue);

<span class="hljs-comment">// 2. PROVIDE value (wrap your app/components)</span>
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">MyContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{someValue}</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">ChildComponents</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">MyContext.Provider</span>&gt;</span></span>

<span class="hljs-comment">// 3. CONSUME value (in any child component)</span>
<span class="hljs-keyword">const</span> value = useContext(MyContext);

<span class="hljs-comment">// 4. Best Practice: Create custom hook</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useMyContext</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> useContext(MyContext);
}
</code></pre>
<p><strong>Remember</strong>: <code>useContext</code> is like a <strong>shortcut through the component tree</strong>. It lets deeply nested components access data without every middle component needing to pass it along!</p>
]]></content:encoded></item></channel></rss>