React Router V6 - Error: useRoutes() may be used only in the context of a <Router> component
Solution 1:
It think the problem is that you still need to wrap routes
(Routes
/ useRoutes
) inside a Router
element.
So an example looks something like this:
import React from "react";
import {
BrowserRouter as Router,
Routes,
Route,
useRoutes,
} from "react-router-dom";
const Component1 = () => {
return <h1>Component 1</h1>;
};
const Component2 = () => {
return <h1>Component 2</h1>;
};
const App = () => {
let routes = useRoutes([
{ path: "/", element: <Component1 /> },
{ path: "component2", element: <Component2 /> },
// ...
]);
return routes;
};
const AppWrapper = () => {
return (
<Router>
<App />
</Router>
);
};
export default AppWrapper;
Refactor according to your needs.
Solution 2:
You should have a <BrowserRouter>
(or any of the provided routers) higher up in the tree. The reason for this is that the <BrowserRouter>
provides a history context which is needed at the time the routes are created using useRoutes()
. Note that higher up means that it can't be in the <App>
itself, but at least in the component that renders it.
Here's what your entry point could look like:
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'),
);