Performance: Modal pattern with intercepting routes
MEDIUM IMPACT
This pattern affects page load speed and interaction responsiveness by controlling when modals load and how routes update without full page reloads.
import { useRouter } from 'next/navigation'; function Page() { const router = useRouter(); const openModal = () => { router.push('/page/modal'); // Intercepting route opens modal overlay }; return <button onClick={openModal}>Open Modal</button>; } // Modal is a separate route segment rendered as overlay without full reload
import { useRouter, useSearchParams } from 'next/navigation'; function Page() { const router = useRouter(); const searchParams = useSearchParams(); const modalOpen = searchParams.get('modal') === 'true'; return ( <> <button onClick={() => router.push('/page?modal=true')}>Open Modal</button> {modalOpen && <Modal />} </> ); } function Modal() { return <div>Modal Content</div>; } // Navigation triggers client navigation/re-render to show modal content // e.g., /page?modal=true causes navigation and re-render
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Full page reload modal | High (reloads entire DOM) | Multiple reflows | High paint cost | [X] Bad |
| Intercepting route modal overlay | Low (adds overlay nodes) | Single reflow | Low paint cost | [OK] Good |