DEV Community

ABISHEK M
ABISHEK M

Posted on

useContext in React

Introduction

React is a popular JavaScript library used to build interactive user interfaces. In React applications, components often need to share data with one another. Usually, data is passed from a parent component to a child component using props. However, when an application contains many nested components, passing props through every intermediate component can make the code difficult to manage. This problem is called prop drilling.

To solve this problem, React provides a Hook called useContext. It allows components to access shared data without manually passing props through every intermediate component. In this blog, we will learn what useContext is, how it works, and where it can be used in real-world applications.

What Is useContext in React?

useContext is a React Hook that allows a component to read a value from React Context. Context provides a way to share data across multiple components without explicitly passing props at every level.

For example, in an e-commerce website, the Navbar, Products page, and Cart page may all need access to the same cart information. Instead of passing cart data through multiple components, we can use Context to make that information available to the components that need it.

The basic syntax is:

const value = useContext(MyContext);
Enter fullscreen mode Exit fullscreen mode

Here, MyContext is the Context object from which the component reads its value.

How Does useContext Work?

Using Context generally involves three steps.

1. Create a Context

First, create a Context object using the createContext() function.

import { createContext } from "react";

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

This creates a Context object that can be used to share information between components.

2. Provide the Data

Next, use the Context Provider to make a value available to descendant components.

<UserContext.Provider value="Abishek">
  <Home />
</UserContext.Provider>
Enter fullscreen mode Exit fullscreen mode

In this example, the Provider makes the value "Abishek" available to components rendered inside it.

3. Access the Data Using useContext

Finally, use the useContext() Hook to access the shared value.

import { useContext } from "react";
import { UserContext } from "./UserContext";

function Home() {
  const username = useContext(UserContext);

  return <h1>Welcome, {username}!</h1>;
}
Enter fullscreen mode Exit fullscreen mode

The output will be:

Welcome, Abishek!

The useContext(UserContext) expression reads the value supplied by the nearest matching Provider above the component. If no matching Provider exists, React returns the default value specified when creating the Context.

Difference Between Props and useContext

Props are used to pass data from a parent component to its children. Context allows components to access shared values from a Provider higher in the component tree.

For simple parent-child communication, props are usually sufficient. However, when multiple components need the same information, Context can help reduce unnecessary prop passing and make the code easier to maintain.

Common Use Cases of useContext

The useContext Hook can be used in many real-world applications:

  • Authentication: Share logged-in user information across components.
  • Theme management: Provide dark mode or light mode preferences throughout an application.
  • Shopping cart: Share cart information between the Navbar, Products page, and Cart page.
  • Language preferences: Make the selected language available to different components.
  • Application settings: Share common configuration values across the component tree.

Important Things to Remember

Although useContext is useful, there are a few important points to understand.

  • Context does not automatically manage state. It can be combined with useState or useReducer to manage changing data.
  • Components must be within the relevant Provider's scope to receive its value.
  • When a Provider's value changes, components consuming that context may re-render.
  • Context does not automatically save data permanently. Data stored only in React state can be lost when the page is refreshed.
  • Context should be used appropriately. Props may be simpler when data only needs to move between a parent and a child.

Conclusion

The useContext Hook is an important feature in React that makes sharing data between components easier. It helps reduce prop drilling and allows multiple components to access shared information without manually passing props through every intermediate component.

To use Context effectively, developers should understand three main concepts: creating a Context with createContext(), providing a value through a Provider, and accessing the value using useContext().

When combined with useState or useReducer, Context can be useful for building applications such as e-commerce websites, authentication systems, and theme management applications.

In simple terms, useContext allows React components to access shared data without passing props through every intermediate component. Understanding this Hook helps developers build more organized and maintainable React applications.

Top comments (1)

Collapse
 
suppdevbot profile image
DEV SUPPORTS •
You need to verify your account.
Enter fullscreen mode Exit fullscreen mode

tr.ee/dev-to