inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Next + React Query로 SNS 서비스 만들기

회원가입 실제로 하기

인터셉트 + 패러렐 라우트 catch-all route 모달 닫힘 경로 문제

해결된 질문

177

kyung3098

작성한 질문수 7

0

안녕하세요 제로초님!

제로초님 강의 보면서 개인 프로젝트 해보고 있는 수강생입니다.

현재 로그인과 회원가입 페이지를 인터셉트와 패러렐 라우트를 이용했는데,

(저의 현재 폴더 구조입니다.)

app/
├── layout.tsx
├── page.tsx  // 메인 페이지
├── @modal/
│   ├── (.)login/
│   │   │   └── page.tsx          // 로그인 모달 페이지
│   ├── (.)signup/
│   │   │   └── page.tsx          // 회원가입 모달 페이지
        // 프로필 수정 모달 페이지
│   ├── [...catchAll]/
│   │   └── page.tsx              // 모달을 닫기 위한 catch-all 라우트
├── (auth)/
│   ├── login/
│   │   └── page.tsx              // 로그인 페이지
│   ├── signup/
│   │   └── page.tsx              // 회원가입 페이지
    └── 기타 페이지들...

 

회원가입이 되면 메인 페이지('/')로 이동하게 했는데 router.push, replace로는 경로는 이동이 되나 모달이 닫히지 않는 문제가 있었습니다.

그래서 catch-all route를 이용해서 특정 경로에 매칭되지 않으면 모달이 닫히도록 null을 반환하였습니다.

// catch-all route
export default function ModalCatchAll() {
  console.log('CatchAll triggered');
  return null;
}

그런데 router.push('/') 메인 홈페이지인 '/' 경로로 이동을 해도 catch-all route가 실행되지 않았는데,

메인 경로 외에 게시글 라우트로 router.push('/foster') 경로를 변경했더니 catch-all route가 실행이 되었습니다.

 

router.back 말고도 push나 replace를 사용하고 싶어서 catch-all route를 사용했는데

메인 홈 경로는 안되고 다른 경로로 이동시킬 때는 catch-all route가 왜 적용되는지 모르겠어서 질문 남깁니다..

react next.js msw

답변 2

0

제로초(조현영)

이게 next.js 버그일 수도 있어서 기본적으로는 .next 캐시 지우고 다시 빌드해서 실행해보셔야 합니다. layout에서는 {modal}과 {children} 둘 다 사용하는 상황인 것이죠?

https://github.com/vercel/next.js/discussions/50284

이 이슈같은데요. layout과 page가 같이 있으면 발생할 수 있다고 하네요

https://github.com/vercel/next.js/discussions/50284#discussioncomment-10098569

0

kyung3098

넵 {modal}과 {children} 둘 다 사용하고 있습니다!

올려주신 이슈 참고하면서 다른 방법 찾아보겠습니다

감사합니다!!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. kyung3098님,

패러랠 라우트와 인터셉터 라우트를 사용하여 모달을 제어하고 계신데, 문제는 홈 경로(‘/’)로 이동 시 모달이 닫히지 않는 부분인 것 같습니다. 그리고 ‘/foster’ 같은 다른 경로로 이동시에는 정상적으로 동작하는 상황이 궁금하신 것 같습니다.

문제에 대한 분석과 제안:

  1. URL과 Router의 동작: router.push를 통해 / 경로로 이동할 때, 인터셉터 라우트가 해당 경로에서도 활성화되지 않는 이유는 아마도 / 경로가 이미 모달을 닫은 후의 경로일 가능성이 있습니다. 다른 경로로 변경될 때는 새로운 경로 감지로 인해 catch-all이 트리거될 수 있습니다.

  2. 모달과 라우팅 문제 해결 방안:

    • useEffect를 활용: 모달이 열려 있는 상태를 감지하고 특정 조건(예: 홈 페이지로 라우팅)에서 모달을 닫는 로직을 useEffect로 추가하는 방법을 고려해보세요.
    • 라우터 모듈로의 모달 상태 전환: 라우터를 통한 모달 상태 초기화나 특정 URL에서 모달을 강제로 닫도록 설정하는 것도 방법일 수 있습니다.
  3. Catch-All 라우트 작동 분석: catch-all 라우트가 특정 라우트에서 동작하지 않는 문제는, 라우터의 주문형 설정, 상태관리, 또는 페이지 초기화 순서와 관련이 있을 수 있습니다. Modal 또는 라우터의 히스토리 상태를 초기화하는 코드 및 작동 순서를 점검해 보세요.

관련 참고 링크로 해당 문제를 겪은 다른 수강생들의 질문들을 살펴보시면 도움이 될 수 있습니다:
- 모달 사용 시 Catch-All 라우팅에 대한 문제 해결

이러한 문제는 종종 코드의 작은 실수나 구성에 기인할 수 있습니다. 보다 명확한 해결을 위해 전체 코드를 검토하거나, 강의 내 유사한 예제를 참고하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

캡처링부분 질문있습니다.

0

76

2

깃에 소스코드를 찾을 수 없습니다.

0

113

2

useInfiniteQuery promise와 react use 사용시 페이지 무한 로딩

0

98

1

import 파일 경로를 찾지 못 해서 에러가 발생합니다.

0

111

2

css 라이브러리 추천 부탁드립니다

0

141

2

팔로우 추천 목록이 빈 배열로 들어옵니다.

0

133

1

게시물 업로드 시 userId가 undefined로 들어가는 오류

0

119

1

useSuspenseQuery 사용 시 SSR 401 이슈 관련

0

172

1

리액트 쿼리 useinfinitequery 무한스크롤 구현 시 페이지가 이동할 경우 데이터가 보존되게 할 수 있나요??

0

184

3

폴링이 필요없는 이유

0

93

2

next Request Memoization과 react cache

0

110

2

seo 최적화 기준은 데이터 fetching인가요 아님 데이터 렌더링인가요?

0

84

2

next.js 서버fetch 에러 fallback ui 구현 방법

0

173

2

프레임워크 여론 파악법

0

125

2

필터옵션이 많은 페이지에서 서버 fetch를 하는게 맞는걸까요??

0

103

2

서버 fetch suspense 로 감싸고 새로고침 시 잠시 빈 화면이 노출된 후 fallback ui가 노출됩니다.

0

102

2

template.tsx 내 서버fetch 응답값과 클라이언트 컴포넌트 상태값 싱크가 맞지 않는 이슈

0

66

2

Auth.js 사용 시 authorize 함수가 호출되지 않습니다

0

132

2

next.js 에서 로그인에 관하여

0

139

1

Next의 route handler에 대한 질문이 있습니다.

0

101

2

게시판 리스트 만들때 use client를 어디서부터 집어넣어야할지 모르겠습니다

0

98

2

프라이빗 폴더를 해야 하는 이유가 모호한 것 같아요.

0

85

2

vanilla-extract 못찾는 문제

0

230

2

fetch 캐싱과 revalidate 관련

0

85

2