cloudflare/vinext

Pages Router: `<Link>` `onClick` / `preventDefault()` semantics broken in new-link-behavior mode

Closed

#1,470 opened on May 22, 2026

 (0 comments) (0 reactions) (0 assignees)TypeScript (371 forks)github user discovery
adapter-api-e2ehelp wanted

Repository metrics

Stars
 (8,563 stars)
PR merge metrics
 (Avg merge 1d 1h) (462 merged PRs in 30d)

Description

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

The Pages Router <Link> shim does not correctly invoke onClick handlers and does not honor event.preventDefault() when running in new-link-behavior mode. Clicks on a Link with an onClick prop do not fire the user's handler, and preventDefault() inside it does not block the resulting navigation.

onClick prop not fired on Link click; preventDefault() does not block navigation

Estimated Impact

~2 test failures across the deploy suite.

Affected Test Suites

  • test/e2e/new-link-behavior/index.test.ts (2 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a <Link onClick={(e) => { e.preventDefault(); spy(); }} href="/x"> test and assert spy ran and the address bar did not change.

  2. Match Next.js click-handler semantics. Invoke onClick first, check event.defaultPrevented, and only call router.push() if the click is not prevented.

Contributor guide