DEV Community

Cover image for React - useContext Hook
vidhya murali
vidhya murali

Posted on

React - useContext Hook

React Context

  • React Context is a way to manage state globally.
  • It can be used together with the useState Hook to share state between deeply nested components more easily than with useState alone

Prop Drilling :

State should be held by the highest parent component in the stack that requires access to the state.

To illustrate, we have many nested components. The component at the top and bottom of the stack need access to the state.

To do this without Context, we will need to pass the state as "props" through each nested component. This is called "prop drilling".

import { useState } from 'react';
import { createRoot } from 'react-dom/client';

function Component1() {
  const [user, setUser] = useState("Linus");

  return (
    <>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 user={user} />
    </>
  );
}

function Component2({ user }) {
  return (
    <>
      <h1>Component 2</h1>
      <Component3 user={user} />
    </>
  );
}

function Component3({ user }) {
  return (
    <>
      <h1>Component 3</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Component1 />
);
Enter fullscreen mode Exit fullscreen mode

Even though component 2 did not need the state, it had to pass the state along so that it could reach component 3.

The solution is to create context.

Create Context

To create context, you must Import createContext and initialize it:

import { useState, createContext, useContext } from 'react';
import { createRoot } from 'react-dom/client';

const UserContext = createContext();
Enter fullscreen mode Exit fullscreen mode

Next we'll use the Context Provider to wrap the tree of components that need the state Context.

Context Provider

Wrap child components in the Context Provider and supply the state value.

function Component1() {
  const [user, setUser] = useState("Linus");

  return (
    <UserContext.Provider value={user}>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 />
    </UserContext.Provider>
  );
}
Enter fullscreen mode Exit fullscreen mode

Now, all components in this tree will have access to the user Context.

Use the useContext Hook
In order to use the Context in a child component, we need to access it using the useContext Hook.

First, include the useContext in the import statement:

import { useState, createContext, useContext } from "react";

function Component3() {
  const user = useContext(UserContext);

  return (
    <>
      <h1>Component 3</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}
Enter fullscreen mode Exit fullscreen mode

Reference :

GitHub : https://use-effect-demo.vercel.app/

Top comments (2)

Collapse
 
karthick_07 profile image
Karthick (k)

It is good

Collapse
 
vidhya_murali_5aabe7784bd profile image
vidhya murali

Thank you 😊