反应路由器 - 受保护的路由组件不起作用

Posted

技术标签:

【中文标题】反应路由器 - 受保护的路由组件不起作用【英文标题】:React router - protected route component isn't working 【发布时间】:2021-10-27 07:23:24 【问题描述】:

如果userAccount boolean 为真,我想显示SignUp 页面组件, 否则显示Header 导航栏。

我尝试添加/删除并重新放置<Switch>,但没有任何效果。

我在这里做错了什么。除了GuardedRoute's Redirect 之外一切正常。

App.js

 return (
    <div className='App'>
      <GuardedRoute path='/signup' auth=userAccount>
        <Switch>
          <SignUp/>
        </Switch>
      </GuardedRoute>
      <Header
      />
      <div className='contant-page'>
        <Switch>
          <Route exact path='/'>
            <Home />
          </Route>
          <Route exact path='/search'>
            <Search
            />
          </Route>
          <Route exact path='/cart'>
            <Cart
            />
          </Route>
          <Route component=PageNotFound />
        </Switch>
      </div>
    </div>
  );

受保护的路线

function GuardedRoute( children, auth, path, ...rest ) 
  console.log('GuardedRoute ' + auth);
  return (
    <Route
      path=path
      render=() => 
        return auth ? children : <Redirect to='/signup' />;
      
    />
  );

相同的受保护路线在其他项目中工作,但这里我有一个标题导航栏,因此路线的代码和顺序不同。

【问题讨论】:

【参考方案1】:

试试这个:

 <div className='contant-page'>
    <Switch>
      <GuardedRoute exact path='/' auth=userAccount>
        <Home />
      </GuardedRoute>
      <GuardedRoute exact path='/search' auth=userAccount>
        <Search
        />
      </GuardedRoute>
      <GuardedRoute exact path='/cart' auth=userAccount>
        <Cart
        />
      </GuardedRoute>
      <GuardedRoute component=PageNotFound/>
    </Switch>
  </div>
</div>

所有路由都必须在交换机内。如果调用了任何受保护的路由并且 auth 为 false,则该路由将重定向到注册作为示例。

【讨论】:

为什么GuardedRoute 包含所有其他组件?为什么是&lt;/Route&gt; 你要做的是:创建一个有保护的注册路由。如果 auth 为 false,则重定向到注册。 auth 是否为真,渲染子项(也是注册组件) 这是行不通的,没有一个会以这种方式呈现。我需要 SignUp 组件显示没有 Header 这里是一个沙盒示例:codesandbox.io/s/nostalgic-stallman-h9k33?file=/src/App.js 好的,谢谢,仍然 - 我在主页/搜索/购物车上方有一个导航栏。我只想显示signUp。我将展示我的代码示例

以上是关于反应路由器 - 受保护的路由组件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

反应路由器链接; activeClassName 不起作用

反应路由器重定向在私有路由中不起作用

反应路由器 v4 重定向不起作用

反应路由器私有路由/重定向不起作用

具有自定义历史记录的反应路由器不起作用

反应路由器导航不起作用