반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

중첩 라우터 본문

UpLog 릴리즈노트 프로젝트

중첩 라우터

5_hyun 2023. 7. 25. 01:46
반응형

이번 프로젝트에서 “/workspace/:product”와 “/workspace/:product/:project” 이런 url을 사용하고자 했다. 이를 위해선 중첩 라우터를 이용하는 방법과 workspace 컴포넌트를 만들고 각 페이지마다 workspace를 부모 태그로 주는 방식 2가지가 있다.

 

우리는 “/workspace”라는 공통적인 url을 사용하기 때문에 중첩 라우터를 사용하는 것이 더 적절하다고 판단하여 중첩 라우터로 구현하였다.

App.tsx

<Route path={'/workspace'} element={<Workspace />}>
  <Route path={':product'} element={<Product />} />
  <Route path={':product/:project'} element={<Project />} />
</Route>

우선 이렇게하여 ”/workspace”에서 url이 뻗어나가도록 했다.

Workspace.tsx

import React from 'react';
import { Outlet } from 'react-router-dom';

export default function Workspace() {
  return (
    <section className={'border-solid border w-h-full flex'}>
      <nav className={'border-solid border w-[18.6rem] h-full'}>사이드 바</nav>
      <article className={'border-solid border w-noneSideBar h-full'}>
        {/* 중첩 라우터 */}
        <Outlet />
      </article>
    </section>
  );
}

Workspace.tsx는 Outlet을 이용하여 중첩 라우터를 구현했다.

Product.tsx & Project.tsx

-Product.tsx

import React from 'react';
import { useParams } from 'react-router-dom';

export default function Product() {
  const { product } = useParams();

  return <div>제품 페이지 {product}</div>;
}

 

-Project.tsx

import React from 'react';
import { useParams } from 'react-router-dom';

export default function Product() {
  const { product } = useParams();

  return <div>제품 페이지 {product}</div>;
}

Product.tsx와 Project.tsx는 위와 같이 구현하였다.

반응형
Comments