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
Fixed useParams hook undesired re-renders and updated it to use PathParamsContext in the app router. #60708
Conversation
This allows for the use of PathParamsContext in the useParams hook. In addition this allows for memoization of the layout tree which fixes undesired re-renders of the useParams hook.
Hi everyone, I noticed this PR has been pending for a while, is there any chance to review it? grateful! |
1 similar comment
Hi everyone, I noticed this PR has been pending for a while, is there any chance to review it? grateful! |
We are also experiencing this issue and we have A LOT of components that gets rerendered. Any update at all on this PR? |
someone for merging this pr ahah ? |
bump |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
buildDuration | 19.8s | 19.8s | N/A |
buildDurationCached | 7.8s | 7.2s | N/A |
nodeModulesSize | 196 MB | 196 MB | N/A |
nextStartRea..uration (ms) | 432ms | 432ms | ✓ |
Client Bundles (main, webpack)
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
1068-HASH.js gzip | 30 kB | 30 kB | N/A |
3f784ff6-HASH.js gzip | 53.5 kB | 53.5 kB | N/A |
4944-HASH.js gzip | 4.96 kB | 4.96 kB | N/A |
8423.HASH.js gzip | 181 B | 181 B | ✓ |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 241 B | 242 B | N/A |
main-HASH.js gzip | 32 kB | 32 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | ✓ |
Overall change | 47.1 kB | 47.1 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
_app-HASH.js gzip | 196 B | 196 B | ✓ |
_error-HASH.js gzip | 184 B | 183 B | N/A |
amp-HASH.js gzip | 503 B | 504 B | N/A |
css-HASH.js gzip | 323 B | 324 B | N/A |
dynamic-HASH.js gzip | 2.5 kB | 2.51 kB | N/A |
edge-ssr-HASH.js gzip | 258 B | 259 B | N/A |
head-HASH.js gzip | 353 B | 351 B | N/A |
hooks-HASH.js gzip | 370 B | 370 B | ✓ |
image-HASH.js gzip | 4.21 kB | 4.2 kB | N/A |
index-HASH.js gzip | 259 B | 259 B | ✓ |
link-HASH.js gzip | 2.68 kB | 2.67 kB | N/A |
routerDirect..HASH.js gzip | 313 B | 314 B | N/A |
script-HASH.js gzip | 386 B | 385 B | N/A |
withRouter-HASH.js gzip | 309 B | 311 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 931 B | 931 B | ✓ |
Client Build Manifests
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
_buildManifest.js gzip | 485 B | 484 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
index.html gzip | 529 B | 527 B | N/A |
link.html gzip | 541 B | 540 B | N/A |
withRouter.html gzip | 525 B | 522 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
edge-ssr.js gzip | 94.4 kB | 94.4 kB | N/A |
page.js gzip | 151 kB | 151 kB | |
Overall change | 151 kB | 151 kB |
Middleware size
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 624 B | 627 B | N/A |
middleware-r..fest.js gzip | 151 B | 151 B | ✓ |
middleware.js gzip | 44.4 kB | 44.4 kB | N/A |
edge-runtime..pack.js gzip | 1.94 kB | 1.94 kB | ✓ |
Overall change | 2.1 kB | 2.1 kB | ✓ |
Next Runtimes
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 166 kB | 166 kB | ✓ |
app-page-exp..prod.js gzip | 95.5 kB | 95.5 kB | ✓ |
app-page-tur..prod.js gzip | 97.2 kB | 97.2 kB | ✓ |
app-page-tur..prod.js gzip | 91.7 kB | 91.7 kB | ✓ |
app-page.run...dev.js gzip | 136 kB | 136 kB | ✓ |
app-page.run..prod.js gzip | 90.2 kB | 90.2 kB | ✓ |
app-route-ex...dev.js gzip | 22 kB | 22 kB | ✓ |
app-route-ex..prod.js gzip | 14.9 kB | 14.9 kB | ✓ |
app-route-tu..prod.js gzip | 14.9 kB | 14.9 kB | ✓ |
app-route-tu..prod.js gzip | 14.6 kB | 14.6 kB | ✓ |
app-route.ru...dev.js gzip | 21.7 kB | 21.7 kB | ✓ |
app-route.ru..prod.js gzip | 14.6 kB | 14.6 kB | ✓ |
pages-api-tu..prod.js gzip | 9.43 kB | 9.43 kB | ✓ |
pages-api.ru...dev.js gzip | 9.7 kB | 9.7 kB | ✓ |
pages-api.ru..prod.js gzip | 9.43 kB | 9.43 kB | ✓ |
pages-turbo...prod.js gzip | 22 kB | 22 kB | ✓ |
pages.runtim...dev.js gzip | 22.7 kB | 22.7 kB | ✓ |
pages.runtim..prod.js gzip | 22 kB | 22 kB | ✓ |
server.runti..prod.js gzip | 50 kB | 50 kB | ✓ |
Overall change | 925 kB | 925 kB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | florian-lp/next.js useparams-prefetch-fix | Change | |
---|---|---|---|
0.pack gzip | 1.55 MB | 1.55 MB | |
index.pack gzip | 104 kB | 104 kB | |
Overall change | 1.65 MB | 1.65 MB |
Diff details
Diff for page.js
Diff too large to display
Diff for 1068-HASH.js
Diff too large to display
Failing test suitesCommit: 4978c45
Expand output● interception-route-prefetch-cache › runtime = edge › should render the correct interception when two distinct layouts share the same path structure
Read more about building and testing Next.js in contributing.md. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR!
it's totally breaking our app since few months now. This should be a breaking change. We are experiencing a lot of issues lately with next :/ When do you guys plan to release a stable version...? |
Moved app-dir path params parsing logic from
useParams
toAppRouter
. This allows for the use ofPathParamsContext
in theuseParams
hook for both pages and app routers. In addition, this allows for memoization of the layout tree which fixes undesired re-renders of theuseParams
hook.Fixes #58788
Closes NEXT-2434