简体   繁体   English

如果用户未登录反应如何隐藏导航

[英]How to hide nav if user is not logged in react

Route.js路由.js

const Layout = () => {
const SecuredRoute = ({ ...props }) => (
    console.log(props.path),
    <Route path={props.path} render={(data) => (
      console.log(data),
      localStorage.getItem('accessToken')
        ? <props.render {...data} />
        : <Redirect to='/login' />
    )} />
  )

return (
    <>
        <BrowserRouter>
            <Navbar />  // It needs to be hidden if user is not logged in
            <div className='layout'>
                <Switch>
                    <Route exact path='/home' component={Home} />
                    <Route exact path='/login' component={Login} />
                    <SecuredRoute exact path='/about' component={About} />
                    <Route exact path='/contact' component={Contact} />
                    <Route exact path='/add' component={AddBlog} />
                    <Route exact path='/edit/:id' component={UpdateBlog} />
                    <Route exact path='/blog/:id' component={Blogdetail} />
                    <Route component={Home} />
                </Switch>
            </div>
            <Footer />
        </BrowserRouter>
    </>
)
}

 export default Layout

I want if the user is not logged in then navbar must be hidden.我想如果用户未登录,则必须隐藏导航栏。 It means when route = '/login' navbar needs to be hidden.这意味着当 route = '/login' 需要隐藏导航栏。 u have tried out many things but nothing works.你已经尝试了很多东西,但没有任何效果。 I am new to React.我是 React 的新手。 Any help will be appreciated?任何帮助将不胜感激?

You can create a boolean variable and short-circuit it.您可以创建一个 boolean 变量并将其短路。

render() {
  const visible = true;
  const notVisible = false;

  return (
    <div>
      {visible && <p>I am visible</p>}
      {notVisible && <p>I am not visible</p>}
    </div>
  );
}

Try this in the Navbar component my friend:在我的朋友的Navbar组件中试试这个:

const [loggedIn, setLoggedIn] = useState(false);
const Layout = () => {
const SecuredRoute = ({ ...props }) => (
    console.log(props.path),
    <Route path={props.path} render={(data) => (
      console.log(data),
      localStorage.getItem('accessToken')
        ? <props.render {...data} />
        : <Redirect to='/login' />
    )} />
  )

return (
    <>
        <BrowserRouter>
            <Navbar loggedIn={loggedIn} />  // It needs to be hidden if user is not logged in
            <div className='layout'>
                <Switch>
                    <Route exact path='/home' component={Home} />
                    <Route exact path='/login' component={() => <Login setLoggedIn={setLoggedIn} />} />
                    <SecuredRoute exact path='/about' component={About} />
                    <Route exact path='/contact' component={Contact} />
                    <Route exact path='/add' component={AddBlog} />
                    <Route exact path='/edit/:id' component={UpdateBlog} />
                    <Route exact path='/blog/:id' component={Blogdetail} />
                    <Route component={Home} />
                </Switch>
            </div>
            <Footer />
        </BrowserRouter>
    </>
)
}

 export default Layout

I gave a setState to login component.我给登录组件一个 setState。 You give a true boolean when the user logs in, loggedIn(true) and the parent state changes.当用户登录时,您会给出真正的 boolean, loggedIn(true)和父 state 更改。 And in the Navbar component:Navbar组件中:

return(
      loggedIn
      ?
      //The Body of NavBar
      :
      ""
      }
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM