Маршрутизатор React продолжает отображать непревзойденный маршрут внутри согласованного маршрута

#javascript #reactjs #routes #react-router

Вопрос:

у меня есть следующая версия документа: «^5.2.0»,

вот мой код:

 import PrivateRoute from './PrivateRoute'
import PublicRoute from './PublicRoute'
import { Route } from 'react-router-dom'
import NotFound from 'page/NotFound'
import Router from './router'

const RouteWrapper = () => (
  <React.Fragment>
    <Route path='*' component={NotFound} />
    {
      Router.map((props) => (
        props.private ? (
          <PrivateRoute key={props.path} {...props} />
        ) : (
          <PublicRoute key={props.path} {...props} />
        )
      ))
    }
  </React.Fragment>
)

export default RouteWrapper
 

в приложении.jsx

 import { BrowserRouter as Router, Switch } from 'react-router-dom'
import { ScrollReset, AuthGuard } from 'utils'
import RouteWrapper from 'router/route_wrapper'

const App = () => (
  <Router basename='/'>
    <ScrollReset />
    <AuthGuard />
    <Switch>
      <RouteWrapper />
    </Switch>
  </Router>
)

export default App
 

Не найдено.jsx:

 const NotFound = () => (
  <div>Page Not Found</div>
)

export default NotFound
 

я создаю не найденный маршрут для обработки ошибки, когда маршрут не совпадает, но маршрут всегда отображается в каждом совпадающем маршруте.
есть какие-нибудь предложения?

Скриншот

Ответ №1:

Не найденный путь маршрута должен быть последним при проверке соответствия любого пути маршрута.

     import PrivateRoute from './PrivateRoute'
    import PublicRoute from './PublicRoute'
    import { Route } from 'react-router-dom'
    import NotFound from 'page/NotFound'
    import Router from './router'
    
    const RouteWrapper = () => (
      <React.Fragment>
        {
          Router.map((props) => (
            props.private ? (
              <PrivateRoute key={props.path} {...props} />
            ) : (
              <PublicRoute key={props.path} {...props} />
            )
          ))
        }
      <Route path='*' component={NotFound} />
      </React.Fragment>
    )
    
    export default RouteWrapper
 

Комментарии:

1. его единственное перемещение не найденного компонента на дно