It’s because the react-router
context isn’t set in that component. Since its the <Router>
component that sets the context you could use useHistory
in a sub-component, but not in that one.
Here is a very basic strategy for solving this issue:
const AppWrapper = () => {
return (
<Router> // Set context
<App /> // Now App has access to context
</Router>
)
}
const App = () => {
let history = useHistory(); // Works!
...
// Render routes in this component
Then just be sure to use the “wrapper” component instead of App
directly.