[Next.js] 모달 뒷배경 스크롤 위치 유지하기 (intercepting Routes + parallel Routes)

김지환·2024년 5월 3일

Next.js App Router에서는 패러럴 라우트(parallel Routes)와 인터셉팅 라우트(intercepting Routes)를 활용해서 모달을 띄울 수 있다.

나 또한 패러럴 + 인터셉팅의 조합으로 모달 띄우고 있었다.

하지만 인터셉팅 라우팅이 일어날 때
모달이 생기면서, 기존의 스크롤 위치가 가장 위로 올라가버리는 현상을 발견했다.

모달을 닫으면 기존의 스크롤 위치로 돌아오기는 한다.

이런 현상을 해결해 보고자 했다.


인터셉팅 라우트도 주소가 바뀌는 게 기본 동작이기 때문에

Next.js의 Link를 아래와 같이 사용했다.

import Link from 'next/link'

<Link href="/somewhere"> 
...
</Link>
Link의 prop으로 `scroll={false}`를 추가하면 해결된다.
import Link from 'next/link'

<Link href="/somewhere" scroll={false}> 
...
</Link>

useRouter를 사용한다면 아래와 같이

import { useRouter } from "next/navigation";
const router = useRouter();
router.push("/somewhere", {scroll:false});

수정 전 - 모달 뒷배경 스크롤이 유지되지 않고 위로 올라감.

수정 후 - 모달 뒷배경 스크롤이 유지된다.

profile
세상의 문제 해결을 즐기는 프론트엔드 개발자

0개의 댓글