I have been doing something like that:
RoutePropsContext.js
import React from 'react';
const RoutePropsContext = React.createContext(null);
export default RoutePropsContext;
index.js
import React from 'react';
import { BrowserRouter as Router} from 'react-router-dom';
ReactDOM.render(
<Router>
<App/>
</Router>
,document.getElementById('root')
);
App.js
import React from 'react';
import {withRouter} from 'react-router-dom';
import RoutePropsContext from '@helpers/context/RoutePropsContext';
function App(props) {
const routeProps = {
match: props.match,
location: props.location,
history: props.history
};
return(
<RoutePropsContext.Provider value={routeProps}>
<YourApp/>
</RoutePropsContext.Provider>
);
}
export default withRouter(App);
useRouteProps.js
import {useContext} from 'react';
import RoutePropsContext from '../context/RoutePropsContext';
function useRouteProps() {
const routeProps = useContext(RoutePropsContext);
return ({
...routeProps
});
}
export default useRouteProps;
Component_Using_the_Hook.js
import React from 'react';
import useRouteProps from './hooks/useRouteProps';
function SomeComponent() {
const {match, location, history} = useRouteProps();
return(
<Something/>
);
}
export default SomeComponent;