개발자
next.js를 사용해서 브라우저에 탭 기능을 사이트 내에서 구현해야 하는 상황입니다. 탭 기능에 추가로 페이지 내부에서 다른 페이지로 가는 링크를 클릭하면 탭 목록에 추가되어야 하고 기존에 있던 탭에 보이던 페이지는 상태가 유지되어야 합니다. 지금 구현한 방법은 미리 모든 페이지의 페이지 컴포넌트를 하나의 파일에 넣어두고 링크를 클릭하면 store에 해당 페이지의 데이터를 넣어주고 Layout 컴포넌트에서 router.path를 비교해서 show/hide을 결정해주고 있는데 뭔가 다른 방식이 없을까요?
답변 1
1. 제일 쉬운 방법 - shadcn ui를 사용하세요. 아마 ‘빵줄기(한국말로 뭐라 따로 부르는 말이 있나요..?)’ 기능을 원하시는거 같습니다. https://ui.shadcn.com/docs/components/breadcrumb 2. 직접구현 - React Context API 또는 zustand + next/navigator - redo, undo 구현하듯이 리액트 콘텍스트 api를 사용하여 히스토리를 저장하세요. 별도 특별한 동작이 필요한 경우 useReducer 훅과 같이 구현하세요. 방문 url을 얻고 사용하는데는 router.path보다 usePathname 훅 사용을 권해드립니다. 더 쉬울거에요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 05월 14일
요구 사항을 살펴보면, 기본적으로 여러 페이지를 동시에 열어놓는 탭 기능과, 각 탭의 페이지 상태 유지등이 필요한 것 같습니다. 현재 사용하고 있는 방법도 잘못된 것은 아니지만, 복잡도가 늘어나거나 실제 웹사이트에 적용할 때 이슈가 발생할 수 있습니다. 예를 들어 모든 페이지 컴포넌트들을 하나의 파일에 넣어두었다면, 페이지들이 많아질수록 파일이 방대해지고 관리가 어려워집니다. Redux 혹은 Context API를 이용하여 탭 관리 로직을 분리하는 방법을 고려해보세요. 이렇게 함으로써 각 탭의 상태 및 내용 (탭에 해당하는 페이지 데이터)를 전역적으로 관리할 수 있으며, 클릭 시 해당 탭의 정보만 업데이트하여 랜더링하게 됩니다. 또 다른 접근 방식으로는 Tab, TabList와 같은 컴포넌트를 만들어 내부에서 라우팅 로직 및 상태 저장 등의 역할을 하는 방안입니다. TabList는 기본적으로 openTabs라는 state를 가지고 있어서, 사용자가 링크를 클릭할 때마다 해당 페이지를 openTabs에 추가합니다. 각 Tab 컴포넌트는 그에 해당하는 페이지의 상태를 유지하며, 탭이 선택되었는지 여부에 따라 보이거나 숨겨집니다. 하지만 Next.js는 기본적으로 SSR(Server Side Rendering)을 지원하기 때문에, 뷰의 상태가 유지되어야 하는 SPA(Single Page Application)스타일의 사이트 개발에 제한적일 수 있습니다. 이 경우 React Router 같은 클라이언트 사이드 라우터를 별도로 사용하거나, 다른 프레임워크나 라이브러리를 고려해보시는 것도 좋습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!