"如果“;不会't在React's组件WillMount()

"if" doesn't work in React's componentWillMount()

本文关键字:组件 WillMount React quot 如果 不会      更新时间:2023-11-19

我创建了一个组件"App",它定义了一个函数componentWillMount(当条件为false时,它应该重定向反应路由器)。

componentWillMount() {
    const isLoggedIn = session.getLogin()
    console.log( 'isLoggedIn is', isLoggedIn )
    if ( !isLoggedIn ) {
        console.log( 'now its false!' )
    } else {
        console.log( 'else' )
    }
    return false
}

但控制台输出以下内容:

isLoggedIn is false
else

我做错什么了吗?我在想,如果isLoggedIn设置为false,控制台应该说"现在是false!",但没有

请注意,session.getLogin()执行return sessionstorage.getItem('sessionLoggedIn')

谢谢你的帮助。

sessionStorage仅在打开的浏览器选项卡上保存数据

componentWillMount() {
    return auth.isAuthenticated();
}

同时auth是一个auth助手

const auth = {
  isAuthenticated() {
    if (typeof window === "undefined")
      return false
    if (sessionStorage.getItem('jwt'))
      return sessionStorage.getItem('jwt')
    else
      return false
  },
  authenticate(jwt, cb) {
    if (typeof window !== "undefined")
    sessionStorage.setItem('jwt', jwt)
    cb();
  },
  signout(cb) {
    if (typeof window !== "undefined"){
      sessionStorage.clear();
    }
    cb()
    signout().then((data) => {
      sessionStorage.clear();
      document.cookie = "t=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"
    })
  }
}

sessionStorage将其所有条目保存为String,因此您从中获得的值实际上是'false'。因此,您需要检查返回的字符串是否仅为'true':

componentWillMount() {
    const isLoggedIn = session.getLogin() === 'true'
    console.log( 'isLoggedIn is', isLoggedIn )
    if ( !isLoggedIn ) {
        console.log( 'now its false!' )
    } else {
        console.log( 'else' )
    }
    return false
}

除此之外,如果这实际上是一个登录功能,那么它是非常不安全的。