next-auth 中 useSession() 的“加载”返回值是什么?

Tre*_*van 7 next.js next-auth

我正在编写一个 Next.js 项目,并使用 GitHub 和next-auth. 在 的示例中next-auth,有一个对 的调用useSession(),它返回两个对象:sessionloading。但是,我见过的所有示例都没有实际使用该loading对象。

import React from 'react'
import { 
  useSession, 
  signin, 
  signout 
} from 'next-auth/client'

export default () => {
  const [ session, loading ] = useSession()

  return <p>
    {!session && <>
      Not signed in <br/>
      <button onClick={signin}>Sign in</button>
    </>}
    {session && <>
      Signed in as {session.user.email} <br/>
      <button onClick={signout}>Sign out</button>
    </>}
  </p>
}
Run Code Online (Sandbox Code Playgroud)

问题: 的目的loading是什么,在实践中是如何使用的?

Iai*_*ins 6

loading选项表示正在更新会话状态;它是true在获取会话数据和false完成检查时。

它有点复杂,因为session即使正在加载该属性也可以已经填充(例如,因为它已经具有可以从先前调用中使用的缓存值),因此从技术上讲,session即使在loadingis时也可以填充true

如果在返回pages/_app.jssession对象中使用 NextAuth.js 提供程序,useSession也可以填充如果getSession()已在getInitialProps()或 中调用getServerSideProps()

如果您有一个活动会话,窗口获得或失去焦点等操作将导致 NextAuth.js 在后台再次检查会话状态,以尝试确保它不是过时的。

tl;博士

当您检查时,loading您可能还想检查session不是null第一次。如果session状态是一个对象,则用户有一个有效的会话,您不需要等待loading返回。

但是,如果sessionnullloading是,false那么他们肯定没有活动会话。

  • 我期望在调用“signIn()”后“loading”为“true”。我想用它在登录提交按钮上显示一个旋转器,同时“signIn()”完成它的任务。**但我必须知道`signIn()`**(还有`singOut()`)**对`loading`没有任何影响。**可能我有一个重大误解。也许有人可以为我拨开迷雾.. (3认同)