第一个问题,网页中的全局登录状态,就是右上角显示用户名和头像的小组件,用 <HydrationBoundary>
+ prefetchQuery()
提前在服务端注水然后前端 useQuery()
,还是单纯前端 useQuery()
拉取?
主要是涉及到一个 SSG 的问题,因为登录状态需要访问 headers()
,这会导致全站失去 SSG ,我在想这样会不会影响性能?
第二个问题,基于上面的不在服务端提前注水的方案,用 useQuery()
封装的用户登录态的 hooks 例如 useLoginedUser()
,页面中即使是客户端组件,多个组件一起使用,也很容易出现 "Hydration Error",必须用 useMounted()
来判断是否运行于浏览器,这样才能不出错。
我估计是服务端预渲染阶段拿不到 cookies ,始终得到未登录的结果,这就和客户端不一致了。 我的想法对吗?这个问题有啥解决方案吗?
当然,用上面的 <HydrationBoundary>
放在根节点,再提前 prefetchQuery()
拿到登录态,这样就没问题了,但还是那个问题,这就失去 SSG 了。
而且就算局部 <HydrationBoundary>
来获取登录态,给局部组件用,但全局右上角那个登录态没有注水,运行 useQuery()
还是会导致 Hydration Error 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.