I'm trying to get the guard working, following the solution I found to this question:
Error: [PrivateRoute] is not a component. All component children of must be a or <React.Fragment>
But I get this error:
A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.
Anyone know how to fix it?
Below is my code in App.js whitout imports:
//all imports
function PrivateRoute({ element, ...rest }) {
const isAuthenticated = localStorage.getItem('token');
return (
<Route
{...rest}
element={isAuthenticated ? element : <Navigate to="/products" />}
/>
);
}
function App() {
return (
<div className="App">
<header className="App-header">
<Router>
<Fragment>
<MainTemplate />
<Routes>
<Route exact path='/' element={<Login />} />
<Route exact path='/products' element={<PrivateRoute />}>
<Route exact path='/products' element={<Products />} />
</Route>
<Route exact path='/product/:id' element={<PrivateRoute />}>
<Route exact path='/product/:id' element={<Product />} />
</Route>
<Route exact path='/add-product' element={<PrivateRoute />}>
<Route exact path='/add-product' element={<AddProduct />} />
</Route>
<Route exact path='/edit-product/:id' element={<PrivateRoute />}>
<Route exact path='/edit-product/:id' element={<UpdateProduct />} />
</Route>
<Route exact path='/orders' element={<PrivateRoute />}>
<Route exact path='/orders' element={<Orders />} />
</Route>
<Route exact path='/edit-order/:id' element={<PrivateRoute />}>
<Route exact path='/edit-order/:id' element={<UpdateOrder />} />
</Route>
<Route exact path='/:category' element={<PrivateRoute />}>
<Route exact path='/:category' element={<Category />} />
</Route>
</Routes>
</Fragment>
</Router>
</header>
</div>
);
}
export default App;
Thanks to whoever will answer!