Reactjs 使用带有私有路由的上下文API响应登录

Reactjs 使用带有私有路由的上下文API响应登录,reactjs,authentication,react-hooks,Reactjs,Authentication,React Hooks,在我的react web应用程序中,使用上下文API和挂钩实现登录注销功能。除了我必须点击“登录”按钮两次才能将用户推到仪表板之外,一切似乎都很正常 语句,return好吧,它归结为一个简单的事实,即当您进行检查时,您的上下文没有更新。最简单的解决方案是删除对isLoggedIn的检查,并将用户推到仪表板: const postLogin = async (e) => { e.preventDefault() try { await login()

在我的react web应用程序中,使用上下文API和挂钩实现登录注销功能。除了我必须点击“登录”按钮两次才能将用户推到仪表板之外,一切似乎都很正常


语句,
return好吧,它归结为一个简单的事实,即当您进行检查时,您的上下文没有更新。最简单的解决方案是删除对
isLoggedIn
的检查,并将用户推到仪表板:

  const postLogin = async (e) => {
    e.preventDefault()
    try {
      await login()

      props.history.push('/dashboard')
    } catch (error) {
      dispatch({
        type: 'LOGIN_FAILURE',
        payload: 'Unable to login'
      })
    }
  }
然后,当您没有返回200时,在您的
登录
函数中抛出一个错误:


由于您的登录代码位于try catch(重试捕获)块中,当登录失败时,用户不会被推到仪表板上。

好的,当您使用
localStorage(本地存储)
时,您可以在发生重新加载时保留数据,这在使用上下文Api时是不可能的。@Gh05d好的。关于我的登录问题有什么帮助吗?
const login = async () => {
    const loginUser = { status: 200, id: '3654634565659abhdgh' }

    if (loginUser.status === 200) {
      dispatch({
        type: 'LOGIN_SUCCESS',
        payload: loginUser.id
      })
    } else {
      throw new Error("Invalid Credentials")
    }
  }