diff --git a/src/components/HistoryRouter.tsx b/src/components/HistoryRouter.tsx index d789944e03..9b0e64f60a 100644 --- a/src/components/HistoryRouter.tsx +++ b/src/components/HistoryRouter.tsx @@ -1,5 +1,8 @@ import React, { useLayoutEffect } from 'react'; import { HistoryRouterProps, Router } from 'react-router-dom'; +import { Update } from 'history'; + +const normalizePath = (pathname: string) => pathname.replace(/^!/, ''); export function HistoryRouter({ basename, children, history }: HistoryRouterProps) { const [state, setState] = React.useState({ @@ -7,14 +10,27 @@ export function HistoryRouter({ basename, children, history }: HistoryRouterProp location: history.location }); - useLayoutEffect(() => history.listen(setState), [history]); + useLayoutEffect(() => { + const onHistoryChange = (update: Update) => { + if (update.location.pathname.startsWith('!')) { + history.replace(normalizePath(update.location.pathname), update.location.state); + } else { + setState(update); + } + }; + + history.listen(onHistoryChange); + }, [ history ]); return (