- 修复 onRenderClient 引入 serverClient 导致浏览器 process is not defined: 抽出双端安全的 ssr/feedSeed.ts 作为唯一数据播种入口,serverClient 加 SSR 守卫 - 修复 React 19 Fizz Suspense Outlining:Suspense 边界从布局 Outlet 下移到 各懒加载路由,SSR 输出不再出现 <!--$?--> / $RB / template 探针标记 - 修复窄屏 React #418 hydration 致命错误:useMediaQuery 首帧恒 false, useLayoutEffect 绘制前同步真实值;主题改 cookie 存储供 SSR 直出, head 内联防闪烁/缩放脚本移除(缩放锁改为客户端 zoomGuard 模块) - 清理假 SSR 残留:删除 StaticFeedList 镜像组件、SSR 图标生成脚本、 探针与死代码;列表接口裁剪正文,仅下发 excerpt/first_image - Feed 与帖子详情改为窗口滚动(app-shell--doc-scroll):删除虚拟列表、 自研滚动快照与全局滚轮 hack;F5/前进后退滚动位置全部交给浏览器原生 历史恢复,HTML 响应头 no-cache 配合;锚点/楼层用 scrollIntoView + scroll-margin-top 适配 sticky 顶栏
25 lines
721 B
TypeScript
25 lines
721 B
TypeScript
import type { PageContextServer } from 'vike/types';
|
||
import type { FeedData } from '../../src/ssr/feedSeed';
|
||
|
||
export { data };
|
||
|
||
type NotFoundAbortReason = {
|
||
head?: FeedData['head'];
|
||
boot?: FeedData['boot'];
|
||
};
|
||
|
||
/**
|
||
* 错误页取数:feed +data 未找到(帖子/板块)时 throw render(404, { head, boot }),
|
||
* 壳层数据经 abortReason 带过来,保证 404 页也渲染完整站点壳与 noindex head。
|
||
*/
|
||
async function data(pageContext: PageContextServer): Promise<FeedData> {
|
||
if (!import.meta.env.SSR) return { kind: 'notfound' };
|
||
|
||
const reason = pageContext.abortReason as NotFoundAbortReason | undefined;
|
||
return {
|
||
kind: 'notfound',
|
||
head: reason?.head,
|
||
boot: reason?.boot,
|
||
};
|
||
}
|