Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
27 | 28 | 29 | 30 |
Tags
- 5.3.8 Modifying Queries
- ubuntu타임존
- 단어 제거
- 중첩배열
- sql 문자열 패턴 검색
- 중복된 단어
- 재귀스왑
- indexOf()
- 배엘에서 스왑
- 스프링 데이타 JPA
- 제로베이스
- 코딩 어?
- 중복 문자열
- 객체의키값만 찾기
- js 문자열을 문자배열로
- 중첩배열평탄화
- 중복단어제거
- 우분투 시간 변경
- ...점점점문법
- 문자열순서바꾸기
- sql like연산자
- 프론트엔드 스쿨
- @Moditying @Query
- 객체의 밸류값만 찾기
- 시퀄 문법
- 중복문자제거
- 레디스 확인
- 문자열 중복
- lastIndexOf()
- 깃 토큰 만료
Archives
- Today
- Total
코딩기록
React) 네비게이션, 메인, 풋터 레이아웃은 css가 아니라 App.tsx에서! 본문
728x90
네비게이션, 메인, 풋터 레이아웃이 너무 안잡혀서 레퍼런스를 보다가 지난 과제에서는 이 고민을 안했던걸 기억하고 서로 비교하면서 보던중, App.tsx에서 차이를 발견했다. 과제에서는 틀을 만들어서 줬고 난 거기에 살을 붙여서 진행 했기 때문에 풋터 위치 조정에 고민을 안했는데 레이아웃을 App.tsx에서 미리 배치해서 줬기 때문에 고민했던 기억이 없었다.
정확한 차이를 우리 쳇지피티 아리에게 물어봤다.
아리답변
네, 맞습니다. 첫 번째 코드처럼 전체 레이아웃을 구성하는 방식이 맞습니다. 이 방식은 레이아웃을 하나의 컴포넌트로 묶어서 전역적으로 관리할 수 있도록 합니다. 이렇게 하면, CSS에서 레이아웃을 직접 배치하지 않더라도, 첫 번째 코드처럼 네비게이션 바, 메인 콘텐츠, 풋터를 전체 레이아웃으로 배치할 수 있습니다.
첫 번째 코드 방식:
return (
<RecoilRoot>
<BrowserRouter>
<input type="checkbox" id="side-menu" className="drawer-toggle" />
<section className="drawer-content">
<Nav /> {/* 네비게이션 바 */}
<section className="main pt-16">
<Router /> {/* 실제 페이지 렌더링 */}
</section>
<Footer /> {/* 풋터 */}
</section>
<Drawer /> {/* 사이드 메뉴 */}
</BrowserRouter>
</RecoilRoot>
);
이 방식의 특징:
- 전체 레이아웃 관리: Nav, Router, Footer, Drawer를 하나의 레이아웃 구조로 묶어서 사용하고 있습니다. Router 컴포넌트 안에서 실제 페이지 콘텐츠를 동적으로 변경하게 되며, Nav와 Footer는 항상 유지됩니다.
- CSS에서 레이아웃 배치: CSS를 통해 drawer-content와 같은 클래스에 스타일을 적용하여 각 컴포넌트의 위치와 레이아웃을 설정할 수 있습니다. 예를 들어:
- .drawer-content { display: flex; flex-direction: column; min-height: 100vh; } .main { flex: 1; /* 메인 콘텐츠가 남은 공간을 차지하도록 */ } nav, footer { width: 100%; }
- 전역 관리: RecoilRoot를 사용하여 전역 상태를 관리하면서, Nav, Router, Footer 등 모든 컴포넌트를 포함하는 레이아웃을 한 번에 관리할 수 있습니다.
두 번째 코드 방식:
return (
<BrowserRouter>
<Routes>
<Route path="/topNav" element={<TopNav />} />
<Route path="/sideBar" element={<Sidebar />} />
<Route path="/footer" element={<Footer />} />
<Route path="/" element={<Main />} />
<Route path="/login" element={<Login />} />
<Route path="/signup" element={<Signup />} />
</Routes>
</BrowserRouter>
);
이 방식의 특징:
- 라우팅 설정: 각 페이지를 라우팅하여 개별적으로 렌더링합니다. 각 Route는 다른 경로에서 다른 컴포넌트를 렌더링합니다. 이 방식은 상단 네비게이션, 사이드바, 푸터를 개별적으로 렌더링하는 방식이기 때문에, 전역적인 레이아웃 관리가 필요하지 않다면 사용할 수 있습니다.
- CSS에서 레이아웃 배치: 각 페이지마다 레이아웃을 개별적으로 관리해야 할 수 있습니다. 즉, TopNav, Sidebar, Footer 등을 각각의 페이지에서 따로 배치해야 합니다.
결론:
- 첫 번째 방식처럼 전체 레이아웃을 구성하면 레이아웃을 한 곳에서 관리하고, 모든 페이지에서 동일한 레이아웃을 사용할 수 있습니다. 이를 통해 네비게이션 바, 메인 콘텐츠, 풋터 등을 동일하게 유지할 수 있습니다.
- 두 번째 방식은 각 페이지에 맞는 컴포넌트를 렌더링하는 방식이기 때문에 각각의 페이지별 레이아웃을 관리해야 하며, CSS에서 레이아웃 배치도 별도로 해줘야 합니다.
따라서, 전체 레이아웃을 전역적으로 관리하고 싶다면 첫 번째 방식이 더 적합합니다.
역시나 내가 고민해야 내 지식이 된다.
참고 쳇지피티
반응형
Comments