cloudflare/vinext

App Router: client `<Link>` soft navigation triggers full server re-render

Open

#1,523 创建于 2026年5月22日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)TypeScript (329 fork)github user discovery
adapter-api-e2ehelp wanted

仓库指标

Star
 (8,120 star)
PR 合并指标
 (平均合并 1天 1小时) (30 天内合并 462 个 PR)

描述

This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext main vs Next.js v16.2.6, 2026-05-22).

Problem

Soft client-side navigations via <Link> (push, back/forward) trigger a fresh server render instead of reusing the cached client tree. The deployment build ID changes between the initial render and after navigation, indicating the client re-fetches rather than soft-navigates. Layout is re-rendered when it should be reused.

Soft <Link> navigation rerenders layout (build IDs differ)

Estimated Impact

~4 test failures across the deploy suite.

Affected Test Suites

  • test/e2e/app-dir/app/index.test.ts (4 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a test that captures the deployment ID once, navigates via <Link> to a sibling route, and asserts the build ID is the same (i.e. no full server re-render).

  2. Make <Link> navigations use the cached client tree. On click, perform an RSC payload fetch and reuse the existing layout/cache subtree instead of dispatching a full server render.

  3. Cover back/forward. Same expectation applies to history traversal.


Part of #1328.

贡献者指南