4 min read
ā¢Question 23 of 47mediumWhat are Intercepting Routes in Next.js?
Intercepting routes for modals.
What You'll Learn
- Intercepting route convention
- Modal patterns
- Soft navigation
Convention
code.jsJavaScript
(.) - Same level
(..) - One level up
(..)(..) - Two levels up
(...) - From rootModal Example
code.jsJavaScript
app/
āāā @modal/
ā āāā default.tsx
ā āāā (.)photo/[id]/
ā āāā page.tsx ā Intercepted (modal)
āāā photo/[id]/
ā āāā page.tsx ā Full page
āāā layout.tsxLayout
code.txtTSX
// app/layout.tsx
export default function Layout({
children,
modal,
}: {
children: React.ReactNode;
modal: React.ReactNode;
}) {
return (
<>
{children}
{modal}
</>
);
}Modal Component
code.txtTSX
// app/@modal/(.)photo/[id]/page.tsx
'use client';
import { useRouter } from 'next/navigation';
export default function PhotoModal({ params }) {
const router = useRouter();
return (
<div className="modal-overlay" onClick={() => router.back()}>
<div className="modal">
<img src={`/photos/${params.id}`} />
</div>
</div>
);
}Default (Empty)
code.txtTSX
// app/@modal/default.tsx
export default function Default() {
return null;
}