Реагирует на частную маршрутизацию через id

#javascript #reactjs #react-router #react-router-dom

#javascript #reactjs #реагирует-маршрутизатор #реагирует-маршрутизатор-dom

Вопрос:

Итак, я использую PrivateRoute in React для обслуживания некоторых компонентов. Все работало нормально, пока я не указал точный путь, как показано ниже:

 <PrivateRoute exact path="/info/:id" render={(props) => <BookInfo {...props} />} />
 

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

PrivateRoute.js

 import React from 'react'
import { Route, Redirect } from 'react-router-dom';
import { connect } from 'react-redux';

const PrivateRoute = ({ component: Component, auth, ...rest}) => (
    <Route {...rest} render={ props => 
        auth.isAuthenticated === true ?
        (<Component {...props}/>) : (<Redirect to ='/login'/>)}/>
)

const mapStateToProps = state => ({
    auth: state.auth
})

export default connect (mapStateToProps)(PrivateRoute);
 

Я не знаю, что является причиной этого, некоторая помощь очень ценится.

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

1. PrivateRoute требуется component передача prop ro. Вам не хватает этого реквизита при вызове <PrivateRoute exact path="/info/:id" render={(props) => <BookInfo {...props} />} />

2. Как я могу решить эту проблему?

3. Попробуйте это <PrivateRoute exact path="/info/:id" component={BookInfo} />

Ответ №1:

Проблема

Ваш PrivateRoute компонент ожидает component передачи реквизита, он не обрабатывает другие реквизиты Route , которые обрабатывает компонент.

 const PrivateRoute = ({
  component: Component, // <-- only handles component prop
  auth, ...rest
}) => (
  <Route {...rest} render={ props => 
    auth.isAuthenticated === true ?
    (<Component {...props}/>) : (<Redirect to ='/login'/>)}/>
)
 

Решение

Передайте свой BookInfo запрос в component prop, чтобы он был передан по каналу.

 <PrivateRoute exact path="/info/:id" component={BookInfo} />
 

Реорганизуйте свой PrivateRoute компонент, чтобы отобразить либо a Route со всеми переданными ему реквизитами, либо Redirect компонент.

 const PrivateRoute = ({ auth, ...props }) => auth.isAuthenticated ? (
    <Route {...props} />
  ) : (
    <Redirect to ='/login'/>
  );