Sometimes, we want to change context value while using the useContext
React hook.
In this article, we’ll look at how to change context value while using the useContext
React hook.
Change Context Value While Using the useContext React Hook
We can pass in the state change function to the context to let us call them anywhere.
This way, we can change the value in whatever component that receives the context.
For example, we can write:
const { createContext, useContext, useState } = React;
const ThemeContext = createContext({});
function Content() {
const { style, color, toggleStyle, changeColor } = useContext(
ThemeContext
);
return (
<div>
<p>
{color} {style}
</p>
<button onClick={toggleStyle}>Change style</button>
<button onClick={() => changeColor('green')}>Change color</button>
</div>
);
}
function App() {
const [style, setStyle] = useState("light");
const [color, setColor] = useState(true);
function toggleStyle() {
setStyle(style => (style === "light" ? "dark" : "light"));
}
function changeColor(color) {
setColor(color);
}
return (
<ThemeContext.Provider
value={{ style, visible, toggleStyle, changeColor }}
>
<Content />
</ThemeContext.Provider>
);
}
We created the ThemeContext
, which we use in the App
component to get the provider and wrap that around the Content
component.
Then we pass our state change functions with the state variables into the context by passing them into the object in the value
prop.
Then in the Content
component, we can call the toggleStyle
and toggleStyle
and changeColor
functions to change the states in App
.
We get those functions in Content
with the useContext
hook.
Conclusion
We can pass in the state change function to the context to let us call them anywhere.
This way, we can change the value in whatever component that receives the context.