Error "Error: A <Route> is only ever to be used as the child of <Routes> element"
Solution 1:
Yes, in react-router-dom version 6 it is a bit different. Please look as the sample below.
React Router tutorial
import { render } from "react-dom";
import {
BrowserRouter,
Routes,
Route
} from "react-router-dom";
import App from "./App";
import Expenses from "./routes/expenses";
import Invoices from "./routes/invoices";
const rootElement = document.getElementById("root");
render(
<BrowserRouter>
<Routes>
<Route path="/" element={<App />} />
<Route path="expenses" element={<Expenses />} />
<Route path="invoices" element={<Invoices />} />
</Routes>
</BrowserRouter>,
rootElement
);
Solution 2:
There was a fairly decent change between versions 5 and 6 of react-router-dom
. It appears that the Udemy course/tutorial is using version 5 where all you needed was a Router
to provide a routing context and Route
components just needed to be rendered within this context. In version 6, however, the Route
components now need to be rendered within a Routes
component (which is an upgrade from the v5 Switch
component).
Introducing Routes
One of the most exciting changes in v6 is the powerful new
<Routes>
element. This is a pretty significant upgrade from v5's<Switch>
element with some important new features including relative routing and linking, automatic route ranking, and nested routes and layouts.
The error message is pretty clear, wrap your Route
components in a Routes
component. The routes also don't take children, they render the components as JSX on the new element
prop.
function App() {
return (
<div>
<Routes>
<Route path="/welcome" element={<Welcome />} />
<Route path="/game" element={<Game />} />
<Route path="/leaderboard" element={<Leaderboard />} />
</Routes>
</div>
);
}