Redux or Context API in React?

Deepak Mankotia
3 min readApr 6, 2023

--

Both Redux and Context API are state management solutions in React, but they serve different purposes.

Redux is a predictable state container for JavaScript applications. It provides a centralized store that holds the entire state of your application and allows you to update the state in a predictable way through actions and reducers. Redux is particularly useful for large applications with complex state management requirements.

On the other hand, Context API is a way to pass data through the component tree without having to pass props down manually at every level. It provides a way to share state between components without having to use a global state container like Redux. Context is particularly useful for small to medium-sized applications or for cases where you only need to share state between a few components.

Ultimately, the choice between Redux and Context API depends on the needs of your application. If you have a large application with complex state management requirements, Redux may be the better choice. If you have a smaller application or only need to share state between a few components, Context API may be a simpler and more lightweight solution.

Here’s an example to illustrate the differences between Redux and Context API in React:

Let’s say you’re building a simple shopping cart application. You have a Cart component that displays the items in the user's cart and a ProductList component that displays a list of products. When the user adds a product to their cart, the Cart component needs to update to reflect the new items, and the ProductList component needs to update to disable the "add to cart" button for that product.

Here’s how you could implement this using Redux:

  1. Create a Redux store with the redux package:
import { createStore } from 'redux';

const initialState = { items: [] };

function cartReducer(state = initialState, action) {
switch (action.type) {
case 'ADD_TO_CART':
return { ...state, items: [...state.items, action.payload] };
default:
return state;
}
}

const store = createStore(cartReducer);

2. Wrap your app with the Redux Provider and pass in the store:

import { Provider } from 'react-redux';

ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);

3. In your ProductList component, dispatch an action to add a product to the cart:

import { useDispatch } from 'react-redux';

function ProductList() {
const dispatch = useDispatch();

function handleAddToCart(product) {
dispatch({ type: 'ADD_TO_CART', payload: product });
}

// render product list with add to cart button
}

4. In your Cart component, connect to the Redux store and display the items in the cart:

import { useSelector } from 'react-redux';

function Cart() {
const items = useSelector(state => state.items);

// render cart with items
}

And here’s how you could implement the same functionality using Context API:

  1. Create a context for the cart:
import { createContext, useState } from 'react';

export const CartContext = createContext();

export function CartProvider(props) {
const [items, setItems] = useState([]);

function addToCart(item) {
setItems([...items, item]);
}

return (
<CartContext.Provider value={{ items, addToCart }}>
{props.children}
</CartContext.Provider>
);
}

2. Wrap your app with the CartProvider:

ReactDOM.render(
<CartProvider>
<App />
</CartProvider>,
document.getElementById('root')
);

3. In your ProductList component, use the CartContext to add a product to the cart:

import { useContext } from 'react';
import { CartContext } from './CartContext';

function ProductList() {
const { addToCart } = useContext(CartContext);

function handleAddToCart(product) {
addToCart(product);
}

// render product list with add to cart button
}

4. In your Cart component, use the CartContext to display the items in the cart:

import { useContext } from 'react';
import { CartContext } from './CartContext';

function Cart() {
const { items } = useContext(CartContext);

// render cart with items
}

As you can see, Redux requires more setup and boilerplate code, but it provides a more robust and scalable solution for managing complex state in large applications. Context API, on the other hand, is simpler and more lightweight, making it a good choice for small to medium-sized applications or for cases where you.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Deepak Mankotia
Deepak Mankotia

Written by Deepak Mankotia

Full Stack Web Developer | Open Source Enthusiast

No responses yet

Write a response