Компонент не отображается во вложенном маршрутизаторе с AuthProvider ,React и Firebase

# #reactjs #firebase-authentication #react-router-dom

#реагирует на #firebase-аутентификация #реагировать-маршрутизатор-дом

Вопрос:

Я провел аутентификацию с помощью fireBase и частного маршрута для пользователей, входящих в систему. Но когда я вхожу в один из компонентов друг друга (не для входа в систему или регистрации продукта), URL обновляется, но он не отображается. App.js

 function App() {  return (  lt;AuthProvidergt;  lt;Switchgt;  lt;PrivateRoute exact path='/' component={MainPageComp}/gt;  lt;Route path='/Signup' component={SignupComp}/gt;  lt;Route path='/Login' component={LoginComp}/gt;  lt;/Switchgt;  lt;/AuthProvidergt;  ); }  

В основном компоненте также есть Маршруты:

 lt;Switchgt;  lt;PrivateRoute exact path='/' component={ProductsComp}/gt;  lt;Route path='/Products' component={ProductsComp}/gt;  lt;Route path='/Customers' component={CustomersComp}/gt;  lt;Route path='/Purchases' component={PurchasesComp}/gt;  lt;Route path='/AddProduct' component={AddProductComp}/gt;  lt;Route path='/EditProduct/:id' component={EditProductComp}/gt;  lt;Route path='/EditCustomer/:id' component={EditCustomerComp}/gt; lt;/Switchgt;  

PrivateRoute.js:

 export default function PrivateRoute({component:Component,...rest}){   const {currentUser} = useAuth()  return(  lt;Route  {...rest}  render={props=gt;{  return currentUser?lt;Component {...props}/gt;:lt;Redirect to='/login'/gt;  }}gt;   lt;/Routegt;  ) }  

Спасибо за помощников

Ответ №1:

В пределах Switch компонентного пути порядок и специфичность имеют значение! Вы неправильно указали домашний "/" путь, чтобы он точно соответствовал. Это обязательно исключает возможность сопоставления каких-либо неточных «подмаршрутов» PrivateRoute компонентом и, поскольку путь больше точно не совпадает MainPageComp , компонент размонтирован.

Чтобы решить эту проблему, упорядочите маршруты/пути в разделе Switch от более конкретных к менее конкретным путям и удалите exact опору для любых путей/маршрутизируемых компонентов, которые потенциально могут отображать вложенные/вложенные маршруты, чтобы их также можно было сопоставлять и отображать. На самом деле, если указано правильно, у вас почти не должно быть необходимости когда-либо использовать exact опору.

Апп

 function App() {  return (  lt;AuthProvidergt;  lt;Switchgt;  lt;Route path='/Signup' component={SignupComp}/gt;  lt;Route path='/Login' component={LoginComp}/gt;  lt;PrivateRoute path='/' component={MainPageComp}/gt;  lt;/Switchgt;  lt;/AuthProvidergt;  ); }  

Основной пакет

 lt;Switchgt;  lt;Route path='/Products' component={ProductsComp}/gt;  lt;Route path='/Customers' component={CustomersComp}/gt;  lt;Route path='/Purchases' component={PurchasesComp}/gt;  lt;Route path='/AddProduct' component={AddProductComp}/gt;  lt;Route path='/EditProduct/:id' component={EditProductComp}/gt;  lt;Route path='/EditCustomer/:id' component={EditCustomerComp}/gt;  lt;PrivateRoute path='/' component={ProductsComp}/gt; lt;/Switchgt;