Load函数在重新加载时没有发送更新的数据



所以一旦用户登录,我设置一个会话cookie。然后由hooks.server.ts文件中的句柄函数验证会话cookie。

// hooks.svelte.ts
export const handle = async ({ event, resolve }) => {
const session = event.cookies.get('session')
if (!session) return resolve(event)
const decodedUser = await admin
.auth()
.verifySessionCookie(session, true)
.catch(() => null)
// If session cookie is invalid then return null
if (!decodedUser) return resolve(event)
event.locals.user = {
user: decodedUser
}
const response = await resolve(event)
return response
}
然后,句柄函数将用户数据发送到+layout.server。
// +layout.server.ts
export const load: LayoutServerLoad = async ({ cookies, locals, depends }) => {
depends('user:changed')

return locals?.user
}

load函数只是将用户数据发送回组件,然后我可以使用$page store或data prop访问这些数据。

我还添加了一个'user:changed'作为依赖项,所以当我调用invalidate('user:changed')时,特别是当用户注销或登录时,load函数会再次运行并发送更新的数据。

我面临的问题

现在的问题是,当我登录并刷新时,$page store或data prop的初始值是一个空对象。因此,我运行invalidate函数并正确更新$page存储。但当我再次刷新时,我又得到一个空对象。但是,如果我硬加载,用户数据将在$page存储中正确返回。

所以,似乎$page store返回缓存它第一次接收到的数据,并在每次后续重载时将其发送回来,并且不更新它。

在我的应用程序中,我检查数据道具是否包含用户数据,如果是,我渲染应用程序或登录页面。因为每次重新加载时,我都会收到一个空对象,我的应用程序会在一瞬间显示登录页面。

知道为什么会这样吗?为什么加载函数不返回更新的值,当我重新加载?

所以,我有一个活跃的服务工作者缓存加载数据,并在每次重新加载网站时返回它。我删除后,一切都很好!

相关内容

  • 没有找到相关文章

最新更新