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

标签 javascript reactjs react-router

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

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

此代码是我的 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 组件就没有Header Like

<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>
 )

关于javascript - 如何在 react 路由器的登录页面中隐藏导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47281850/

相关文章:

javascript - 使用 Javascript 从父 onblur 关闭子窗口

javascript - 使用 React 定期重新加载 iframe 的最佳方法是什么?

reactjs - Firebase 网站在每次部署时都需要很长时间才能加载

javascript - react 类没有被导出,我不明白为什么?

reactjs - React Hooks 在模态弹出窗口上调用 GET 请求

javascript - 处理 "cannot read property of null"错误

javascript - 针对 Laravel 后端的 Angular Auth

javascript - 动态设置对象文字值

javascript - 如何在 React Router 中将 DefaultRoute 设置为另一个 Route

javascript - 如何根据 Prop reactjs 渲染部分渲染