Home  >  Article  >  Web Front-end  >  How to Navigate Outside of Components in React Router v6?

How to Navigate Outside of Components in React Router v6?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 11:43:01459browse

How to Navigate Outside of Components in React Router v6?

react router v6: Navigating Outside of Components

React Router v6 introduces changes in the way history objects are handled. While in v5, you could create a shared history object and pass it to the Router, v6 requires a different approach.

Problem:

How can you navigate from outside components in react router v6, similar to the behavior in v5?

Solution:

To replicate the previous behavior, you can create a custom router that instantiates the history state as done in RRDv6 routers:

<code class="javascript">const CustomRouter = ({ history, ...props }) => {
  const [state, setState] = useState({
    action: history.action,
    location: history.location
  });

  useLayoutEffect(() => history.listen(setState), [history]);

  return (
    <Router
      {...props}
      location={state.location}
      navigationType={state.action}
      navigator={history}
    />
  );
};</code>

Include this custom router in your application and pass your custom history object:

<code class="javascript">export default function App() {
  return (
    <CustomRouter history={history}>
      <div className="App">
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/profile" element={<Profile />} />
        </Routes>
      </div>
    </CustomRouter>
  );
}</code>

Update:

React Router v6 surfaces a history router, allowing you to pass a custom history instance:

<code class="javascript">import { unstable_HistoryRouter as HistoryRouter } from "react-router-dom";
import { createBrowserHistory } from "history";

const history = createBrowserHistory({ window });

ReactDOM.render(
  <HistoryRouter history={history}>
    {/* The rest of your app goes here */}
  </HistoryRouter>,
  root
);</code>

Notes for RRDv6.4 :

For RRDv6.4 and Data routers, navigate outside of components using the router navigate function:

<code class="javascript">import { createBrowserRouter } from 'react-router-dom';

const router = createBrowserRouter(...);

...

router.navigate(targetPath, options);</code>

The above is the detailed content of How to Navigate Outside of Components in React Router v6?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn