Skip to content

Swipe back on mobile browser with getInitialProps flickers the previous page #10465

Open
@mikaa123

Description

@mikaa123

Bug report

Describe the bug

On mobile browsers (tested with Chrome and Firefox), swiping back or forward on a dynamic page (one that gets data from getInitialProps) will sometimes "flash" the previous page while the content is loading. Here is a video that shows the problem.

To Reproduce

  1. Create a next.js app with the following pages:

index.js

import Link from "next/link";

export default function Index() {
  return (
    <div>
      <p><Link href="data"><a>Link</a></Link></p>
    </div>
  );
}

data.js

const Index = props => {
  return (
    <div>
      <h1>Test mobile back</h1>
      <ul>
        {props.data.map(name => (
          <li key={name}>
              <a>{name}</a>
          </li>
        ))}
      </ul>
    </div>
  )
};

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

Index.getInitialProps = async function() {
  await sleep(1000)

  return {
    data: ["one", "two", "three", "four", "five", "six"]
  };
};

export default Index;
  1. Run it, and access it with a mobile browser.
  2. Click on the link, you are now on a page with "one", "two"...
  3. Swipe back
  4. Now swipe forward. Notice the "flash" of the previous screen.

Now, add "seven" to the data returned in data.js, and notice the problem doesn't happen anymore

Expected behavior

No flash of the previous page when swiping forward or backward on mobile browser. This is what happens now vs this is what should happen

System information

  • OS: MacOS
  • Browser (if applies): Mobile Safari, chrome and firefox
  • Version of Next.js: 9.2.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Linking and NavigatingRelated to Next.js linking (e.g., <Link>) and navigation.good first issueEasy to fix issues, good for newcomers

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions