개발자
next.js로 구성된 사이트에서 특정 링크를 클릭해서 새로운 url로 이동되면 새로운 url로 이동됨과 동시에 브라우저 탭처럼 새로운 탭이 생성됩니다. 그리고 다른 url로 이동하면 새로운 탭이 생성 됩니다. 그리고 기존의 탭에는 새로운 url로 변경하기전에 있는 데이터들과 상태값이 유지되어 있고, 사용자가 해당 탭을 클릭시에 기존에 하던 화면을 그대로 보여줘야 합니다. 간단하게 이야기해서 웹사이트내에 크롬 상단 브라우저탭 기능을 만들려고합니다. 이것저것 시도해보고 있는데 next.js의 url routing를 사용하면서 기존의 상태값을 유지하기가 쉽지가 않네요 혹시 좋은 조언이 있으면 구하고 싶습니다. 감사합니다!
답변 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> ); };
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!