首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@reach/路由器嵌套保护路由

@reach/路由器嵌套保护路由
EN

Stack Overflow用户
提问于 2020-03-12 07:14:00
回答 1查看 1.9K关注 0票数 1

我使用具有自定义保护路由的reach/路由器,如下所示:

代码语言:javascript
运行
复制
const ProtectedRoute = ({ component: Component, ...rest }) => (
  localStorage.getItem('user_id') ? <Component {...rest} /> : <Redirect from="" to="/login" noThrow />
);

const LoginRoute = ({ component: Component, ...rest }) => (
  localStorage.getItem('user_id') ? <Redirect from="" to="/home" noThrow /> : <Component {...rest} />
);

const PublicRoute = ({ component: Component, ...rest }) => (
  <Component {...rest} />
);

<Router>
  <LoginRoute component={Login} path="/login" />
  <PublicRoute default component={Notfound} />

  <ProtectedRoute component={landingPage} path="/home" />
  <ProtectedRoute path="/" component={App} />
  <ProtectedRoute component={UserList} path="user" />
  <ProtectedRoute component={UserDetail} path="user/create" />
</Router>

我希望这是与user/:id嵌套的路由

代码语言:javascript
运行
复制
<ProtectedRoute component={UserList} path="user" />
<ProtectedRoute component={UserDetail} path="user/create" />

我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 07:51:04

我觉得你把事情搞得很复杂

代码语言:javascript
运行
复制
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>
  )
}

如果这不符合你的预期,或者你觉得你想用你的方式使用它,那么就这样做。

代码语言:javascript
运行
复制
<Router>
  ...
  <ProtectedRoute component={UserList} path="user">
    <UserDetail path="create" />
  </ProtectedRoute>
</Router>

不需要将ProtectedRoute自组织用于UserDetail,因为它已经嵌套在ProtectedRoute

UserList中,使用props.children呈现UserDetail

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60649200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档