Skip to content

Instantly share code, notes, and snippets.

@NAPOLEON039
Created March 28, 2022 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NAPOLEON039/886ccb5a03cc0a57d4c632e4ca031046 to your computer and use it in GitHub Desktop.
Save NAPOLEON039/886ccb5a03cc0a57d4c632e4ca031046 to your computer and use it in GitHub Desktop.

In the previous article, we looked at what Context is and how to pass values with it. In this article we will look at updating the Context value from the child component. For our theme example this means clicking the button will now switch the theme between light and dark.

Updating Context value

In the previous article, we directly passed the theme via the Provider component. Although the value is passed to ThemeButton.js and ThemeWindow.js components, we cannot update this value.

To switch between the two theme types, we need to pass a function as well. This function will allow us to switch between both themes.

So we need to pass this function along with the dark theme via the Provider component. To do this, we can create a stateful object which will contain both the theme and a function. This way React can keep track of the theme and perform the necessary re-renders when it updates.

Creating a stateful object

This is pretty straightforward. A stateful object containing a theme type and a function is passed via the Provider component. While the ThemeWindow component only needs minor changes, we do need to implement the function in the ThemeButton component.

Implementing theme switch function

Nothing special needs to be done to implement the function. Calling it when the button is pressed will switch the theme.

Implementing theme switch function

As easy as that. When this button is clicked, the switchTheme() function will be executed. This will update the stateful value and thus trigger a re-render. And finally, the updated theme will be rendered in the ThemeWindow component.

Minor changes in ThemeWindow

Wrapping up

This was the conclusion to the previous article about React Context. As you have seen, React Context is a powerful tool.

However, this simple example does not really showcase its power. In complex applications with dozens of components, where values and state need to be passed to several different components, React Context will make this job far easier than regular props.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment