Я чувствую, что вы усложняете вещи
const Routes = () => {
const [loggedIn, setLoggedIn] = useState(false)
useEffect(() => {
localStorage.getItem('user_id') && setLoggedIn(true)
}, [])
return (
<Router>
<LoginRoute component={Login} path="/login" />
<Notfound default />
{
loggedIn
? (
<>
<LandingPage path="/home" />
<App path="/" component={App} />
<UserList component={UserList} path="user">
<UserDetail component={UserDetail} path="create" />
</UserList>
</>
) : (
<Redirect from="" to="/login" noThrow />
)
}
</Router>
)
}
Если это не сработало как задумано, или вы чувствуете, что хотите использовать это по-своему, сделайте это
<Router>
...
<ProtectedRoute component={UserList} path="user">
<UserDetail path="create" />
</ProtectedRoute>
</Router>
Нет необходимости использовать ProtectedRoute
HO C для UserDetail
, поскольку он уже вложен в ProtectedRoute
, а в UserList
используйте props.children
для рендеринга UserDetail