Skip to content

fix TypeError edge-case for parallel slots rendered multiple times #64271

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

ztanner
Copy link
Member

@ztanner ztanner commented Apr 9, 2024

What

When rendering a parallel slot multiple times in a single layout, in conjunction with using an error boundary, the following TypeError is thrown:

Cannot destructure property 'parallelRouterKey' of 'param' as it is null

Why

See facebook/react#28669, which has not yet been upstreamed into Next.js.

How

Rather than passing the error component as a prop to LayoutRouter, this puts it as part of the CacheNodeSeedData data structure. This is more aligned with other properties anyway (such as loading and rsc for each segment), and seems to work around this bug as the initialSeedData prop is only passed from RSC->client once.

Fixes #58485
Closes NEXT-2095

Copy link
Member Author

ztanner commented Apr 9, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @ztanner and the rest of your teammates on Graphite Graphite

@ztanner ztanner force-pushed the 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times branch 2 times, most recently from 8f3a15c to a3702aa Compare April 9, 2024 21:16
@ijjk
Copy link
Member

ijjk commented Apr 9, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
buildDuration 22.9s 22.7s N/A
buildDurationCached 14s 10.4s N/A
nodeModulesSize 199 MB 199 MB ⚠️ +8.63 kB
nextStartRea..uration (ms) 733ms 656ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
2453-HASH.js gzip 31.4 kB 31.5 kB N/A
3304.HASH.js gzip 181 B 181 B
3f784ff6-HASH.js gzip 53.7 kB 53.7 kB
8299-HASH.js gzip 5.1 kB 5.1 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 244 B 242 B N/A
main-HASH.js gzip 29.6 kB 29.7 kB N/A
webpack-HASH.js gzip 1.68 kB 1.68 kB N/A
Overall change 99 kB 99 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
_app-HASH.js gzip 196 B 197 B N/A
_error-HASH.js gzip 184 B 184 B
amp-HASH.js gzip 505 B 505 B
css-HASH.js gzip 324 B 325 B N/A
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 258 B 258 B
head-HASH.js gzip 352 B 352 B
hooks-HASH.js gzip 370 B 371 B N/A
image-HASH.js gzip 4.27 kB 4.27 kB
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.67 kB 2.67 kB N/A
routerDirect..HASH.js gzip 314 B 312 B N/A
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 309 B 309 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 6.63 kB 6.63 kB
Client Build Manifests
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
_buildManifest.js gzip 483 B 485 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
index.html gzip 528 B 527 B N/A
link.html gzip 541 B 540 B N/A
withRouter.html gzip 524 B 522 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
edge-ssr.js gzip 94.4 kB 94.4 kB N/A
page.js gzip 3.05 kB 3.05 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
middleware-b..fest.js gzip 623 B 625 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 25.5 kB 25.5 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 839 B 839 B
Next Runtimes
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
app-page-exp...dev.js gzip 171 kB 171 kB N/A
app-page-exp..prod.js gzip 97.5 kB 97.5 kB N/A
app-page-tur..prod.js gzip 99.2 kB 99.2 kB N/A
app-page-tur..prod.js gzip 93.5 kB 93.5 kB N/A
app-page.run...dev.js gzip 145 kB 145 kB N/A
app-page.run..prod.js gzip 92 kB 92 kB N/A
app-route-ex...dev.js gzip 21.5 kB 21.5 kB
app-route-ex..prod.js gzip 15.2 kB 15.2 kB
app-route-tu..prod.js gzip 15.2 kB 15.2 kB
app-route-tu..prod.js gzip 14.9 kB 14.9 kB
app-route.ru...dev.js gzip 21.1 kB 21.1 kB
app-route.ru..prod.js gzip 14.9 kB 14.9 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 21.4 kB 21.4 kB
pages.runtim...dev.js gzip 22.1 kB 22.1 kB
pages.runtim..prod.js gzip 21.4 kB 21.4 kB
server.runti..prod.js gzip 51.5 kB 51.5 kB
Overall change 248 kB 248 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times Change
0.pack gzip 1.6 MB 1.59 MB N/A
index.pack gzip 107 kB 108 kB ⚠️ +145 B
Overall change 107 kB 108 kB ⚠️ +145 B
Diff details
Diff for middleware.js

Diff too large to display

Diff for 2453-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Commit: ce504a1

@ztanner ztanner marked this pull request as ready for review April 9, 2024 22:36
@ztanner ztanner requested review from acdlite and removed request for wyattjoh, shuding, huozhi, timneutkens, feedthejim and ijjk April 9, 2024 22:36
@ztanner ztanner force-pushed the 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times branch from a3702aa to 02fff07 Compare April 16, 2024 23:22
@ztanner ztanner force-pushed the 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times branch from 02fff07 to ce504a1 Compare April 17, 2024 01:03
@ztanner ztanner enabled auto-merge (squash) April 17, 2024 01:10
@ztanner ztanner merged commit f93ae7c into canary Apr 17, 2024
75 of 79 checks passed
@ztanner ztanner deleted the 04-09-fix_TypeError_edge-case_for_parallel_slots_rendered_multiple_times branch April 17, 2024 01:18
ztanner added a commit that referenced this pull request Apr 17, 2024
…times" (#64690)

Reverts #64271

This appears to be causing problems rendering error boundaries on SPA
navigations and needs further investigation

Closes NEXT-3150
@github-actions github-actions bot added the locked label May 1, 2024
@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 1, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

TypeError: Cannot destructure property 'parallelRouterKey' of 'param' as it is null.
3 participants