위와 같은 구조의 포트폴리오 사이트를 리액트 네이티브 SPA로 구현 중이다. 리액트 라우팅에 대해 학습한 내용을 정리해본다.
// App.js
import React from 'react';
import './App.css';
import Nav from './Nav';
import AboutMe from './AboutMe';
import MyWork from './MyWork';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
function App() {
return (
<Router>
<div className="App">
<Nav />
<Switch>
<Route path="/" exact component={Home} />
<Route path="/aboutme" component={AboutMe} />
<Route path="/mywork" component={MyWork} />
</Switch>
</div>
</Router>
);
}
const Home = () => (
<div>
<h1>Home Page</h1>
</div>
)
export default App;
BrowserRouter as Router
는 코드에서 Router
를 식별자로 사용하겠다는 의미이다.Switch
는 URL 매칭이 일어나면 그 경로에서 렌더링을 멈춘다. (하나의 컴포넌트만 렌더링 되도록)path="/"
에 대해 exact
를 사용하지 않으면 /
로 시작하는 다른 경로도 포함하게 된다.// Nav.js
import React from 'react';
import { Link } from 'react-router-dom'
function Nav() {
const navStyle = {
textDecoration: 'none',
color: 'black'
}
return (
<nav>
<Link style={navStyle} to='/aboutme'>
<h3>About Me</h3>
</Link>
<Link style={navStyle} to='/mywork'>
<h3>My Work</h3>
</Link>
</nav>
);
}
export default Nav;
<nav></nav>
태그 안에서 링크의 집합을 정의할 수 있다.<Link to='/pathname'>
로 링크 경로를 설정한다.작업 후 화면에 이렇게 출력된다.
.App {
text-align: center;
}
nav {
display: flex;
justify-content: space-around;
align-items: center;
min-height: 10vh;
background-color: #FFE5CD;
}