오늘은 어제에 이어 React로 트위터 클론을 만들었다. react-router-dom을 설치하여 좌측 사이드바 아이콘을 누를때 마다 url주소가 바뀌고 해당하는 컴포넌트가 feature div 안에 보여지도록 하였다. 최소 기능 요구사항을 모두 만족시키고 Advanced Challenge까지 하고도 한두 시간 정도 남아 CSS로 다크모드로 꾸며 보았다. 색상 팔레트는 One Dark Pro 테마에서 따왔다. 스크롤바도 기본 스크롤은 다크 테마에서 너무 튀어서 여기를 참고해서 커스텀으로 꾸몄다.
추가 과제 중에 history
객체를 사용해서 뒤로가기 버튼을 만드는 것이 있었는데 나와 내 페어는 useHistory
hook으로 구현했는데 스프린트 오피스 아워에서는 withRouter()
고차 컴포넌트를 사용하였다. 주말에 history
객체와 사용법에 대해 좀 더 찾아보고 정리해야 겠다.
npm install react-router-dom
import React from "react";
// 필요한 컴포넌트 BrowserRouter, Switch, Route, Link를 react-router-dom에서 import하기
import { BrowserRouter, Switch, Route, Link } from "react-router-dom";
// URL주소에 따라 <main> 안에 보여줄 Home, About, Contact, PageNotFound 컴포넌트 import하기
import Home form "./Pages/Home";
import About form "./Pages/About";
import Contact form "./Pages/Contact";
import PageNotFound form "./Pages/PageNotFound";
const App = () => {
return (
{/* BrowserRouter: 라우팅 컴포넌트들의 최상단에 위치해야 하는 컴포넌트 */}
<BrowserRouter>
<header>
<nav>
<ul>
{/* Link: 페이지 리로드 없이 해당 패스로 내비게이션을 수행하는 컴포넌트 (<a>태크를 사용하면 페이지 리로드 발생) */}
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/contact">Contact</Link></li>
</ul>
</nav>
</header>
<main>
{/* Switch: 현재 주소창의 URL과 일치하는 path를 가진 첫번째 Route를 렌더링하는 컴포넌트 */}
<Switch>
{/* Route: path값이 현재 주소창의 URL과 일치할 때 감싸고 있는 컴포넌트를 렌더링하는 컴포넌트 */}
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
<Route component={PageNotFound} />
</Switch>
</main>
</BrowserRouter>
);
}
export default App;