Sometimes, we want to use Context API with React Router v4.
In this article, we’ll look at how to use Context API with React Router v4.
How to use Context API with React Router v4?
To use Context API with React Router v4, we wrap the Context.Provider
component around our route components.
For instance, we write
Store.js
import React, { createContext, useReducer } from "react";
import Reducer from "./reducer.js";
const initialState = {
//...
};
const Store = ({ children }) => {
const [state, dispatch] = useReducer(Reducer, initialState);
return (
<Context.Provider value={[state, dispatch]}>{children}</Context.Provider>
);
};
export const Context = createContext(initialState);
export default Store;
to define the Store
component that wraps the Context.Provider
around the children
prop.
children
has the components that we put inside Store
.
Then in App.js
, we write
const App = () => {
return (
<BrowserRouter>
<Switch>
<Route
exact
path="/"
render={(props) => (
<Store>
<Home {...props} />
</Store>
)}
/>
<Route
exact
path="/about"
render={(props) => (
<Store>
<About {...props} />
</Store>
)}
/>
<Route
exact
path="/login"
render={(props) => (
<Store>
<Login {...props} />
</Store>
)}
/>
</Switch>
</BrowserRouter>
);
};
to set the render
prop of each Route
component to a function that renders Store
with the route component inside.
As a result, Home
, About
, and Store
has access to the Context
we defined in Store.js
.
Conclusion
To use Context API with React Router v4, we wrap the Context.Provider
component around our route components.