yamoo9 / likelion-FEQA

질문/답변 — 프론트엔드 스쿨, 멋사
29 stars 9 forks source link

[LAB-5] 라우터 연결 문제 관련 #188

Closed HYBEN09 closed 1 year ago

HYBEN09 commented 1 year ago

질문 작성자

변혜빈

문제 상황

홈 화면에는 헤더와 푸터가 불러와 지지 않게 하고 다른 페이지들은 헤더와 푸터가 불러와 지게 하고싶은데 라우터 구성을 어떻게 해야될지 감이 잡히지 않아서 질문 올립니다..!

[렌더링 되는 화면]

스크린샷 2023-03-22 오전 12 34 28

[ 라우터 코드 ]

스크린샷 2023-03-22 오전 12 34 28

[ LayOut 페이지 코드 ]

image

프로젝트 저장소 URL

[Lab5 - develop 브랜치] https://github.com/React-Project-lab5/React-Project-lab5/tree/develop

[라우터 코드 위치]

image

[LayOut 페이지 코드 위치]

image

환경 정보

운영체제 : Windows Node.js : v16.14.0 라이브러리 : React v18.2.0

yamoo9 commented 1 year ago

문제 상황

홈 화면에는 헤더와 푸터가 불러와 지지 않게 하고 다른 페이지들은 헤더와 푸터가 불러와 지게 하고싶은데 라우터 구성을 어떻게 해야될지 감이 잡히지 않아서 질문 올립니다..!

문제 해결

레이아웃 컴포넌트에 BaseLayout을 추가합니다. 그리고 RootLayout 컴포넌트에서 헤더, 푸터를 제거합니다.

Layout.tsx

import { Footer, Header } from '@/components';
import { Outlet } from 'react-router-dom';

export default function RootLayout() {
  return (
    <>
      <Outlet />
    </>
  );
}

export function BaseLayout({ children }: { children: React.ReactNode }) {
  return (
    <>
      <Header />
      <main>{children}</main>
      <Footer />
    </>
  );
}

그리고 App 컴포넌트를 열어 라우트 구성을 아래와 같이 수정해보세요. 😃

App.tsx

import RootLayout, { BaseLayout } from './pages/Layout/Layout';

const router = createBrowserRouter([
  {
    path: '/',
    element: <RootLayout />,
    errorElement: <NotFound />,
    children: [
      { index: true, element: <Home /> },
      {
        path: 'mainPage',
        element: (
          <BaseLayout>
            <MainPage />
          </BaseLayout>
        ),
      },
      {
        path: 'recommend',
        element: (
          <BaseLayout>
            <Recommend />
          </BaseLayout>
        ),
      },
      {
        path: 'chat',
        element: (
          <BaseLayout>
            <Chat />
          </BaseLayout>
        ),
      },
      {
        path: 'myPage',
        element: (
          <BaseLayout>
            <MyPage />
          </BaseLayout>
        ),
      },
    ],
  },
]);

그러면 아래처럼 홈 페이지 이외의 나머지 페이지는 헤더와 푸터를 포함하게 됩니다.

Home

MainPage