route
+ -ing
: 경로(route)를 찾아가는 행위React는 기본적으로 라우팅 시스템을 갖추고 있지 않으므로(라이브러리), react-router-dom
과 같은 부가적인 라이브러리를 설치해서 라우팅 기능을 추가할 수 있다.
react-router-dom
을 사용한 라우팅에 필요한 기본적인 구조는 아래와 같다.
// index.html
<!DOCTYPE html>
<head>
<title>React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
// index.js
ReactDOM.render(<Routes />, document.getElementById("root"));
// Routes.js
const Routes = () => {
return (
<Router>
<Nav />
<Routes>
<Route path="/" element={<App />} />
<Route path="/users" element={<Users />} />
<Route path="/products" element={<Products />} />
</Routes>
<Footer />
</Router>
);
};
div#root
이하에 끼워넣는 역할보통의 방법은 완전히 정해진 경우(정적, static)에 대한 경로를 표현한다.
"/" => <App />
"/users" => <Users />
"/products" => <Products />
아래 사진처럼 레이아웃은 같지만 안의 내용이 다른 경우라면?
/32692
, /53424
), 해당 id 값에 따라 서로 다른 상세페이지 정보가 화면에 그려지는 것을 볼 수 있다. id 값에 따라 무수히 많은 url이 나타날 것이고, 각각의 모든 url에 대해 미리 경로의 형태와 갯수를 결정할 수 없게 된다.1) Path Parameter
// Bad
"/users/1" => <Users id={1} />
"/users/2" => <Users id={2} />
"/users/3" => <Users id={3} />
"/users/4" => <Users id={4} />
"/users/5" => <Users id={5} />
// Good
"/users/:id" => <Users /> // useParams().id
2) Query Parameter
// Bad
"/search?keyword=위코드" : <Search keyword="위코드" />
"/search?keyword=리액트" : <Search keyword="리액트" />
"/search?keyword=라우팅" : <Search keyword="라우팅" />
"/search?keyword=쿼리스트링" : <Search keyword="쿼리스트링" />
"/search?keyword=SPA" : <Search keyword="SPA" />
// Good
"/search?keyword=something" : <Search /> // useLocation().search