javascript - Ruta implicită în React Router DOM v5 nu funcționează
Folosesc react router dom v5 cu material ui și am rutele mele în felul următor:
import React from 'react'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
import Layout from '../components/layout'
import Login from '../screens/Login'
import NotFound from '../screens/NotFound'
import routes from './routes'
const DynamicRoutes = () => {
return (
<>
{Object.values(routes).map(({ component, path }) => (
<Route exact path={path} key={path} component={component} />
))}
</>
)
}
const Router = () => {
return (
<BrowserRouter>
<Switch>
<Route exact path="/login" component={Login} />
<Layout>
<DynamicRoutes />
</Layout>
<Route path="*" component={NotFound} />
</Switch>
</BrowserRouter>
)
}
export default Router
Am încercat deja cu <Route component={NotFound} />, și niciunul nu a funcționat pentru mine. Poate cineva să mă ajute? Restul rutelor funcționează corect, dar când tastez o rută falsă, nu merg la ecranul NotFound.
Răspuns #1
Acest lucru se întâmplă deoarece toate elementele copil ale unui <Switch> ar trebui să fie elemente <Route> sau <Redirect>. Poți verifica mai multe despre asta în documentația react-router-dom.
Deci, o soluție pentru codul tău ar fi să faci ceva de genul acesta:
<BrowserRouter>
<Switch>
<Route exact path="/login" component={Login} />
{Object.values(routes).map(({ Component, path }) => (
<Route exact path={path} key={path}>
<Layout>
<Component />
</Layout>
</Route>
))}
<Route path="*" component={NotFound} />
</Switch>
</BrowserRouter>
*Pentru array-ul de obiecte routes, proprietatea Component trebuie să fie cu literă mare C.
Poți verifica acest cod de exemplu.
