vercel / next.js

The React Framework
https://nextjs.org
MIT License
127.47k stars 27.04k forks source link

Wrong segment rendered when quickly reload page and navigate through browser history in Next.js 13+. #69401

Open bohdan-mykhailenko opened 3 months ago

bohdan-mykhailenko commented 3 months ago

Link to the code that reproduces this issue

https://codesandbox.io/p/devbox/snowy-platform-7k39wy

To Reproduce

  1. Run the preview of provided SandBox code.
  2. Open it in a separate browser tab.
  3. Navigate between Page 1 and Page 2 routes to create window.history records to be able to go back via browser arrow.
  4. Try to reload page via browser reload button or keyboard and go back to previous route(make it as fast as possible)
  5. If you did it fast enough you can see updated URL and the content from previous page (segment) .
  6. If you did it not fast enough you can try it again from step 3.

Current vs. Expected behavior

Actual result: page content is still from previous route and URL is correct. Expected result: page content where I go back and URL must be correct.

Provide environment information

Operating System:
  Platform: linux
  Arch: x64
  Version: #1 SMP PREEMPT_DYNAMIC Sun Aug  6 20:05:33 UTC 2023
  Available memory (MB): 4102
  Available CPU cores: 2
Binaries:
  Node: 20.9.0
  npm: 9.8.1
  Yarn: 1.22.19
  pnpm: 8.10.2
Relevant Packages:
  next: 15.0.0-canary.132 // Latest available version is detected (15.0.0-canary.132).
  eslint-config-next: N/A
  react: 19.0.0-rc-eb3ad065-20240822
  react-dom: 19.0.0-rc-eb3ad065-20240822
  typescript: 5.3.3
Next.js Config:
  output: N/A

Which area(s) are affected? (Select all that apply)

Navigation, Pages Router

Which stage(s) are affected? (Select all that apply)

next dev (local), next start (local), Vercel (Deployed), Other (Deployed)

Additional context

That issue exists in all Next.js 13+ that I tried to reproduce bug.

Here is the screen record from official Vercel website that also reproduces that issue.

Current way to fix. To fix that bug, I check for actual rendered segment, then check for what actually I have in URL and use router.push to URL with rendered segment. As I tested it's not possible to correctly change segment according to URL but it's possible to change URL according to rendered segment. But you need to configure that logic manually for a lot of segments so it's not the best option of course but at least we show correct content and URL for user.

rimoslav commented 3 weeks ago

I'm experiencing the same issue, NextJS app router, version 14.2.5. Any update on this?

Edit by maintainer bot: Comment was automatically minimized because it was considered unhelpful. (If you think this was by mistake, let us know). Please only comment if it adds context to the issue. If you want to express that you have the same problem, use the upvote 👍 on the issue description or subscribe to the issue for updates. Thanks!