Skip to content

no-duplicate-lifecycle-refresh-listeners

Do not register one Next.js route-refresh callback for both focus and visibilitychange.

Why

A browser tab activation can emit both lifecycle signals and invoke the same route-wide refresh twice.

Fix

Choose one lifecycle signal or route both signals through an explicitly debounced refresh policy.

Examples

Before — flagged Do not duplicate a route refresh
src/refresh.ts
import { useRouter } from "next/navigation";
const router = useRouter();
const refresh = () => router.refresh();
window.addEventListener("focus", refresh);
document.addEventListener("visibilitychange", refresh);
After — preferred Listen to one lifecycle signal
src/refresh.ts
import { useRouter } from "next/navigation";
const router = useRouter();
const refresh = () => router.refresh();
window.addEventListener("focus", refresh);