2025-02-17
3735
#react
Adebiyi Adedotun
20310
Feb 17, 2025 ⋅ 13 min read

React Context tutorial: Complete guide with practical examples

Adebiyi Adedotun Caught in the web, breaking things and learning fast.

Recent posts:

Crud Rest Api With Node Js Express And Postgresql

CRUD REST API with Node.js, Express, and PostgreSQL

Build a CRUD REST API with Node.js, Express, and PostgreSQL, then modernize it with ES modules, async/await, built-in Express middleware, and safer config handling.

Tania Rascia
Mar 25, 2026 ⋅ 16 min read
the replay march 25

The Replay (3/25/26): Senior dev hiring woes, what AI agents miss, and more

Discover what’s new in The Replay, LogRocket’s newsletter for dev and engineering leaders, in the March 25th issue.

Matt MacCormack
Mar 25, 2026 ⋅ 29 sec read
emmanuel john senior dev hiring

The hidden skills gap in senior dev hiring (and how to screen for it)

Discover a practical framework for redesigning your senior developer hiring process to screen for real diagnostic skill.

Emmanuel John
Mar 25, 2026 ⋅ 12 min read

Does the Speculation Rules API boost web speed? I tested it

I tested the Speculation Rules API in a real project to see if it actually improves navigation speed. Here’s what worked, what didn’t, and where it’s worth using.

Jude Miracle
Mar 24, 2026 ⋅ 10 min read
View all posts

11 Replies to "React Context tutorial: Complete guide with practical examples"

  1. What am I doing wrong? When I try, I get this error “Objects are not valid as a React child (found: object with keys…” Using react Version 17.x

    “`
    function UserProvider({children}) {
    const value = useState({
    name: ‘Guest’,
    email: false,
    is_logged_in: false,
    is_admin: false
    });

    return {children}
    }
    “`

  2. Great article! I’ve considered using context for form validation (i.e. validation errors from the server) so that all children (inputs) of a form can show validation errors without passing the errors array to each input. Redux (or similar) isn’t really appropriate here since there can be multiple forms on a page (at least we’ll need to identify each) and that validation errors are only relevant for descendants.

  3. Hi, In the Profile() method, how do I set the username? setUserDetails({username: “known-user”}) doesn’t seem to work.

  4. Traditionally, this is the case for all the reasons mentioned. Though you can try @webkrafters/react-observable-context on npm. It removes many of the redux and react context bottlenecks while making it easier to reuse your components.

  5. Also, instead of having two different contexts for passing down a value and setting the value, you can have this in one function and pass the value as an object containing the actual value and function which will update the value. For example, in your example:
    “`
    import React, { createContext, useState } from “react”;

    const UserContext = createContext(undefined);
    const UserDispatchContext = createContext(undefined);

    function UserProvider({ children }) {
    const [userDetails, setUserDetails] = useState({
    username: “John Doe”
    });

    return (

    {children}

    );
    }
    “`

    we can have this as:

    “`
    import React, { createContext, useState } from “react”;

    const UserContext = createContext(undefined);

    function UserProvider({ children }) {
    const [userDetails, setUserDetails] = useState({
    username: “John Doe”
    });

    return (

    {children}

    );
    }
    “`

    then in the component that uses this prop, obtain the values as:

    “`
    const {userDetails, setUserDetails} = useContext(UserContext);
    “`

Leave a Reply

Your email address will not be published. Required fields are marked *

Hey there, want to help make our blog better?

Join LogRocket’s Content Advisory Board. You’ll help inform the type of content we create and get access to exclusive meetups, social accreditation, and swag.

Sign up now