8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 React 中正确处理注销页面和随后的登录页面而不导致页面重新渲染?

TFOH 2月前

29 0

我正在开发一个 React 应用程序,我需要通过注销用户并将其重定向回登录页面来处理用户不活动的情况。但是,我遇到了页面渲染两次的问题...

我正在开发一个 React 应用程序,我需要处理用户不活动的情况,方法是注销用户,然后将他们重定向回登录页面。但是,我遇到了一个问题,即页面渲染两次,导致明显的闪烁或延迟。

该组件如下:

export const LogoutInactivityTimeout = () => {
  const { search, pathname } = useLocation()
  const { loginWithInactiveTimeout, logout } = useAuthenticationContext()
  const redirect = new URLSearchParams(search).get('redirect') ?? ''
  const isReturningFromLogout =
    new URLSearchParams(search).get('isReturningFromLogout') === 'true' || false

  useEffect(() => {
    if (!isReturningFromLogout) {
      logout({
        returnTo: `${window.location.origin}${pathname}?redirect=${redirect}&isReturningFromLogout=true`,
      })
    } else {
      loginWithInactiveTimeout(redirect)
    }
  }, [
    logout,
    loginWithInactiveTimeout,
    isReturningFromLogout,
    pathname,
    redirect,
  ])

  return (
    <AuthLoadingPage>
...
    </AuthLoadingPage>
  )
}

当 isReturningFromLogout 为 false 时,将触发 logout 函数,该函数将用户注销并将其重定向回同一组件,并将 isReturningFromLogout 参数设置为 true。此时,将调用 loginWithInactiveTimeout 函数将用户定向到登录页面。

这种方法会导致页面渲染两次——一次是在注销过程中,另一次是在登录过程中。这会给用户体验带来闪烁,而这正是我想要避免的。

如何处理注销和登录过程,以确保在注销完成后调用登录,以防止页面渲染两次?

我尝试将注销函数包装在 Promise 中,并使用 .then(),但由于 Auth0 的注销函数没有返回 Promise,因此这种方法无法按预期工作。

在 React 中是否有更有效的方法来处理这个过程,或者我应该考虑完全不同的方法?

帖子版权声明 1、本帖标题:如何在 React 中正确处理注销页面和随后的登录页面而不导致页面重新渲染?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由TFOH在本站《javascript》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: