The issue involves mobile-specific behavior and timing-sensitive rendering.
The issue describes a flickering effect when swiping back or forward on mobile browsers with dynamic pages using `getInitialProps`. The problem seems timing-sensitive and mobile-specific, requiring a fix that ensures smooth transitions without flashes of previous content.
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.
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;
Now, add "seven" to the data returned in data.js, and notice the problem doesn't happen anymore
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
Claim this issue to let others know you're working on it. You'll earn 20 points when you complete it!