React JS: компонент не отображается с компонентом пользовательского маршрута?

#javascript #node.js #reactjs

#javascript #node.js #reactjs

Вопрос:

Я пытаюсь создать защищенные маршруты в своем приложении react. Если я перехожу на защищенный маршрут и не перенаправляюсь, мне выдается пустой экран, а компонент не отображается / не отображается?

Если это так, компонент не отображается:

 <ProtectedRoute exact path="/home" component={Home} />
 

Если это так, он отображается:

 <Route exact path="/home" component={Home} />
 

Защищенный маршрут:

 import auth from '../utilities/auth';
import { Route, Redirect } from 'react-router-dom';

function ProtectedRoute({ component, ...rest }) {
  return (
    <Route {...rest} render={() => {
      return auth.isAuthenticated()
        ? component
        : <Redirect to='/accounts/login' />
    }} />
  )
}

export default ProtectedRoute;
 

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

1. Можете ли вы предоставить изолированную среду для воспроизведения этого? вопрос, почему он ничего не отображает.

Ответ №1:

Вам нужно на самом деле визуализировать компонент. Прямо сейчас вы просто возвращаете компонент, но не визуализируете его. Просто возвращаясь , component вы делаете эквивалент возвращения Home , в то время как то , что вы должны делать , — это возвращение <Home /> .

То, что вы должны делать, это что-то вроде

 // assigning component to Component so React knows it's a custom component when you render it
function ProtectedRoute({ component: Component, ...rest }) {
  return (
    <Route {...rest} render={() => {
      return auth.isAuthenticated()
        ? <Component /> // so you're actually rendering the component
        : <Redirect to='/accounts/login' />
    }} />
  )
}