리액트 라우터를 이용하면 URL를 다양한 URL로 구성할수있으며, 다양한 URL의 따른 리액트 컴포넌트와의 맵핑을 진행할수있다.
<a>
와 같은 페이지 이동이 아닌 브라우저의 URL을 변경한다.React-Router 설치
yarn add react-router-dom
/src/App
import { Route, Switch } from "react-router";
// 루트경로가 다른경로에 중첩되기때문에 exact를 부여한다 */}
<Switch>
// 잘못된 URL일 경우 오류를 띄울수있다. 404처리
<Route exact path="/" component={Main} />
<Route path="/about" component={About} />
<Route path="/lessons" component={Lessons} />
<Route component={() => <h2>404 Not Found</h2>} />
// switch를 이용하여 예외처리가 가능하다
</Switch>
/src/Nav
import { Link, NavLink } from "react-router-dom";
<li>
<NavLink exact to="/">
Main
</NavLink>
</li>
<li>
<NavLink exact to="/about">
About
</NavLink>
</li>
<li>
<NavLink exact to="/lessons">
Lessons
</NavLink>
</li>
/src/Lessons
// 정적데이터
import lessonsData from "../static-data/lessonsData";
import Lesson from "./Lesson";
import { NavLink, Route } from "react-router-dom";
class Lessons extends Component {
render() {
const links = lessonsData.map((lesson) => {
return (
<div component="nav" key={lesson.id}>
<NavLink to={`/lessons/${lesson.id}`}>{lesson.name}</NavLink>
</div>
);
});
return (
<div>
<div>
<div>{links}</List>
</div>
<div>
{/* parameter 지정할때 /: 이름지정 */}
<Route path="/lessons/:lessonId" component={Lesson} />
</div>
</div>
);
}
}
export default Lessons;
import React, { Component } from "react";
import lessonsData from "../static-data/lessonsData";
class Lesson extends Component {
render() {
const lessonId = this.props.match.params.lessonId;
const selectedLesson = lessonsData.find((lesson) => {
return lesson.id === Number(lessonId);
});
return <div>{selectedLesson.description}</div>;
}
}
export default Lesson;