user 페이지와 별개로, admin 페이지를 넣기 위해 react-router-dom을 사용하기로 했습니다. 먼저 프로젝트에 react-router-dom을 추가합니다.
npm install react-router-dom
# or
yarn add react-router-dom
user.js 파일과 admin.js 파일을 만든 뒤, 기존의 App 클래스의 이름을 User로 변경하여 user.js로 옮깁니다. App.js에는 다음과 같은 코드를 추가합니다. path 앞에 콜론(:)을 붙여, 변수로 넘길 수 있습니다.
import React, { Component } from 'react'
import { HashRouter as Router, Route, Redirect } from 'react-router-dom'
/* User, Admin from custom module */
export default class App extends Component {
render() {
return (
<Router>
<Redirect from="/" to="/user/4" /> {/* 이렇게 사용할 수 있습니다. */}
<Route path="/user/:floor" component={User} /> {/* 필드 명은 floor입니다. */}
<Route path="/admin" component={Admin} />
</Router>
)
}
}
User에서는 아래와 같은 방식으로 해당 변수를 받습니다.
import React, { Component } from 'react'
/* Reserve, Modify, End from custom module */
export default class User extends Component {
render () {
const {
floor,
} = this.props.match.params
return (
<div>
<Reserve floor={floor} />
<Modify floor={floor} />
<End floor={floor} />
</div>
)
}
}
링크를 통해 다른 페이지로 이동할 수 있습니다.
import React, { Component } from 'react'
import { Link } from 'react-router-dom'
/* Reserve, Modify, End from custom module */
export default class User extends Component {
render () {
const {
floor,
} = this.props.match.params
return (
<div>
<Link to="/admin">Admin</Link>
<Reserve floor={floor} />
<Modify floor={floor} />
<End floor={floor} />
</div>
)
}
}
HashRouter vs BrowserRouter
HashRouter
와 BrowserRouter
는 모두 React Router ver. 4부터 Router
의 서브 클래스로 도입된 컴포넌트입니다.
HashRouter
의 주소 체계는 location.hash
에 대응되며, www.domain.com/#/user/4
와 같은 식입니다. 서버는 이를 www.domain.com
에 대한 요청으로 받아들입니다. 때문에 서버는 # 이전까지인 www.domain.com
에 대한 응답을 돌려줍니다. 이런 작동 방식으로 인해 HashRouter
는 백엔드가 필요하지 않은 상황에 주로 사용합니다.
몇몇 상황에서 HashRouter
는 문제를 일으킬 수 있는데, 대표적인 예가 다른 페이지를 링크할 때 입니다. 링크 경로가 클라이언트 react 앱에는 있지만 서버에는 없을 때, HashRouter
는 404 not found error를 띄웁니다. 그래서 위와 같이 코드를 작성하고 나서 user.js를 수정하게 되면 react가 reload 되며 404 에러가 발생할 수 있습니다.
BrowserRouter
를 통해 접속한 페이지는 location.pathname
을 이용해 값을 얻을 수 있으며, www.domain.com/user/4
와 같은 식입니다. 서버에서도 똑같이 www.domain.com/user/4
로 받아들이며, 이에 따른 응답을 줍니다. 또한 이 방식은 브라우저가 제공하는 history API를 사용할 수 있습니다.
하지만 react를 node.js가 아닌 Apache 등에서 돌릴 경우 (왜 이런 짓을..) 404 에러가 발생하는 때가 있으며, 이를 해걸하기 위해 .htaccess
파일을 구성해야 한다고 합니다.
https://stackoverflow.com/questions/51974369/hashrouter-vs-browserrouter
HashRouter vs BrowserRouter
I am new to programming which makes things slightly difficult for me to understand if I read the offical docs. I was reading about React Router 4 from here In this article, the author was talking
stackoverflow.com
https://developer.mozilla.org/en-US/docs/Web/API/History_API
History API
The DOM Window object provides access to the browser's session history (not to be confused for WebExtensions history) through the history object. It exposes useful methods and properties that let you navigate back and forth through the user's history, and
developer.mozilla.org
'React' 카테고리의 다른 글
이슈 14 조금 편하려고 했을 뿐인데 마주친 오류... electron-webpack 배포하기; Uncaught Error: Cannot find module './main' (0) | 2020.02.26 |
---|---|
이슈 12 react form 초기화하는 세 가지 방법 (0) | 2020.02.03 |
이슈 11 React.createElement: type is invalid (0) | 2020.01.31 |
이슈 10 react 다국어 지원, import { default as smt } from ... (0) | 2020.01.29 |
이슈 9 Parsing error: Unexpected token = eslint (0) | 2020.01.22 |