当前位置: 首页 > 面试题库 >

如何在React路由器的登录页面中隐藏导航栏

牛昱
2023-03-14
问题内容

我想在登录页面中隐藏导航栏。

我确实做到了,但是在其他页面上看不到导航栏。

该代码是My App.jsx文件的一部分。

我在App的状态下创造历史。当此路径名是“ /”或“ / login”时,我隐藏了导航栏。

有用!

但是然后我输入了ID和密码,然后单击登录按钮,获得“成功”结果,并导航到“ / main”。

现在我在主组件中也看不到导航栏。

我怎样才能做到这一点?

对不起,我的英文简短。 如果您不明白我的问题,可以发表评论。

constructor(props) {
  super(props);
  this.state = {
    isAlertOpen: false,
    history: createBrowserHistory(),
  };
  this.toggleAlert = this.toggleAlert.bind(this);
}

<BrowserRouter>
  <div className="App">
    {this.state.history.location.pathname === '/' || this.state.history.location.pathname === '/login' ? null
      : <Header toggleAlert={this.toggleAlert} />}
    <div className="container">
      {this.state.history.location.pathname === '/' || this.state.history.location.pathname === '/login' ? null
        : <Navbar />}
      <Route exact path="/" render={() => <Redirect to="/login" />} />
      <Route path="/login" component={Login} />
      <Route path="/main" component={Main} />
      <Route path="/user" component={User} />
      <Route path="/hw-setting" component={Setting} />
      <Route path="/hw-detail/:id" component={HwDetail} />
      <Route path="/gas-detail/:id" component={GasDetail} />
      {this.state.isAlertOpen ? <Alert /> : null}
    </div>
  </div>
</BrowserRouter>



login(event) {
  event.preventDefault();
  userService.login(this.state.id, this.state.password).subscribe(res => {
    if (res.result === 'success') {
      global.token = res.token;
      this.props.history.push('/main');
    } else {
      alert(`[ERROR CODE : ${res.statusCode}] ${res.msg}`);
    }
});

问题答案:

您可以采用Routes不同的结构,以使Login组件没有HeaderLike

<BrowserRouter>
  <Switch>
  <div className="App">
    <Route exact path="/(login)" component={LoginContainer}/>
    <Route component={DefaultContainer}/>

  </div>
  </Switch>
</BrowserRouter>

const LoginContainer = () => (
  <div className="container">
    <Route exact path="/" render={() => <Redirect to="/login" />} />
    <Route path="/login" component={Login} />
  </div>
)


 const DefaultContainer = () => (
    <div>
    <Header toggleAlert={this.toggleAlert} />
    <div className="container">
      <Navbar />
      <Route path="/main" component={Main} />
      <Route path="/user" component={User} />
      <Route path="/hw-setting" component={Setting} />
      <Route path="/hw-detail/:id" component={HwDetail} />
      <Route path="/gas-detail/:id" component={GasDetail} />
      {this.state.isAlertOpen ? <Alert /> : null}
    </div>
    </div>
 )


 类似资料:
  • 如何使底部导航栏在Android Studio的visual XML编辑器中消失?我已经将AppTheme设置为NoActionBar。导航栏很烦人,因为我的手机没有导航栏,所以当我在可视编辑器中的应用程序底部放置一些东西时(https://i.imgur.com/1QvdIOd.png),当我在手机上运行应用程序时会发生这种情况:https://i.imgur.com/Qk5S1Oe.jpg.谁

  • 在开发模式下运行时,Spring Security重新定向到React前端(使用React路由器运行)的登录页面时,我遇到了一个配置问题。我相信我的前端没有接收到重定向,这是因为我对服务器端路由如何与SPA路由交互的noob理解。 我的开发前端web服务器(使用Facebook Create React App)在localhost:3000上运行,我的后端Spring Boot Tomcat在l

  • 我正在做一个应用程序,并有权访问系统权限。我想让导航栏永久隐藏,它甚至不应该出现在用户交互上。 现在我使用这段代码,它隐藏了条,但当用户触摸屏幕时,它会再次显示。是否有任何方法可以永久隐藏它,直到活动停止(); 如有任何关于最佳实施的技术咨询或意见/建议,将不胜感激。

  • 我正在使用React制作一个动态网页。我正在使用React Routers中的一个交换机组件,根据用户的需要,将主页更改为其他各种页面。我希望通过以下路由创建新帐户: 主页 我的问题在于从第三个创建帐户页面返回主页或登录页面。我可以创建链接,使我从第1页 最初,我在createaccount页面中有一个switch语句,呈现三个独立的组件。如果我在这个switch语句中设置了route home,

  • 问题内容: 我可以使我的应用程序通过SFSafariViewController自动加载此帖子的网址,并且效果很好,唯一的缺点是导航栏。 以这种方式使用SFSafariViewController导航栏时,它是无用的,因为url是只读的,并且“ done”链接除了重新加载页面外不执行任何操作。因此,我想完全隐藏导航栏。 根据已接受答案的注释,建议将我的根视图控制器设置为SFSafariViewCo

  • 我正在开发一个基于Spring Boot的web应用程序,主页包含一个带有登录和注册链接的boostrap navbar。 一旦用户登录(通过单击从主页登录链接),他们将再次被重定向到主页(除非他们在spring security启动A&A之前访问任何其他链接)。在重定向,我想隐藏登录和注册链接从navbar和显示注销链接在他们的地方。因为我想在应用程序的所有页面中插入navbar。 我想知道什么