2021-09-24
|~1 min read
|169 words
A situation came up recently where I was getting very peculiar results with my router.1
To help understand what was going on, I looked into how to debug a react router.
My favorite answer was a functional component that I could use to wrap my Router.
In practice it looked a bit like this:
export const App = () => {
  return (
    <Router basename="/menu-management">
      <DebugRouter>
        <Switch>
          <Route path="/subpage">
            <SubPage />
          </Route>
          <Route path="/">
            <Main />
          </Route>
        </Switch>
      </DebugRouter>
    </Router>
  )
}The actual component is easy to reason through:
const DebugRouter = ({ children }: React.PropsWithChildren<unknown>) => {
  const { location } = useHistory()
  if (process.env.NODE_ENV === "development") {
    console.log(
      `Route: ${location.pathname}${location.search}, State: ${JSON.stringify(
        location.state,
      )}`,
    )
  }
  return children
}When the component renders, we’ll track the state of our router.
Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!