개발자

next.js에서 브라우저에 있는 탭기능을 구현하려고 합니다.

2024년 05월 16일조회 285

next.js로 구성된 사이트에서 특정 링크를 클릭해서 새로운 url로 이동되면 새로운 url로 이동됨과 동시에 브라우저 탭처럼 새로운 탭이 생성됩니다. 그리고 다른 url로 이동하면 새로운 탭이 생성 됩니다. 그리고 기존의 탭에는 새로운 url로 변경하기전에 있는 데이터들과 상태값이 유지되어 있고, 사용자가 해당 탭을 클릭시에 기존에 하던 화면을 그대로 보여줘야 합니다. 간단하게 이야기해서 웹사이트내에 크롬 상단 브라우저탭 기능을 만들려고합니다. 이것저것 시도해보고 있는데 next.js의 url routing를 사용하면서 기존의 상태값을 유지하기가 쉽지가 않네요 혹시 좋은 조언이 있으면 구하고 싶습니다. 감사합니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

포크코딩님의 프로필 사진

1. 기존 탭 상태 값 유지 url에 쿼리 파라미터를 이용해서 상태 값을 유지합니다. Excalidraw나 tldraw 같은 화이트보드 앱 등에서 주로 보셨을 겁니다. - useSearchParams() / client component - const HomePage = ({searchParams}) => { ...} / server component 위 훅 또는 props를 이용해서 상태 값의 형태를 만들고 조작하고, 앱 생명 주기동안 유지될 수 있도록 contextAPI 또는 zustand 같은 것을 이용하여 저장하세요. contextAPI를 쌩으로 사용한다면, 탭 추가, 현재 탭, 이전 탭, 탭 삭제 같은 동작을 리듀서로 정의해서 useReducer 훅과 함께 사용하세요. 2. Tab UI 단순 예시용으로 쓴 의사코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// TabInBrowser.tsx
"use client";

import { useContext } from "react";

const TabsInBrowser = () => {
  const tabInfo = useContext(TabInfosContext);
  return (
    <Tabs>
      <TabHeader>
        {/* Tab Header. for example: nav for tabs */}
        {tabInfo.map((info) => (
          <>...</>
        ))}
      </TabHeader>
      <TabContent>
        {/* Tab Content. Rendering Informations with URL search params. The informations are from react context api or zustand*/}
        {/* ... */}
        {tabInfo.map((info) => (
          <>...</>
        ))}
        {/* ... */}
      </TabContent>
    </Tabs>
  );
};

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!