January 13, 2019
이전 포스팅에서 CRA(create-react-app)을 통해 생성된 어플리케이션을 homepage에 호스팅 해봤습니다. 이번 포스팅은 해당 어플리케이션을 react-router-dom 을 통해 SPA(single application app)으로 구현하는 튜토리얼을 진행해보겠습니다.
DEMO 페이지는 react-spa-ghpages에서 확인가능합니다.
yarn add react-router-dom semantic-ui-react
|-- node_modules
|-- public
|-- index.html
|-- favicon.ico
|-- src
|-- App.js
|-- App.css
|-- About.js
|-- Home.js
|-- NotFound.js
|-- index.js
|-- index.css
|-- package.json
|-- READEME.MD
|-- yarn.lock
import React, { Component } from "react";
import { Switch, HashRouter as Router, Route } from "react-router-dom";
import logo from "./logo.svg";
import "./App.css";
import About from "./About";
import Home from "./Home";
import NotFound from "./NotFound";
class App extends Component {
render() {
return (
<Router>
<div>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/about" component={About} />
<Route component={NotFound} />
</Switch>
</div>
</Router>
);
}
}
export default App;
touch Home.js About.js NotFound.js
import React, { Component } from "react";
import { Link } from "react-router-dom";
class Home extends Component {
render() {
return (
<div>
<p>Hello World!</p>
<p>
<Link to="/about">about 페이지로 이동</Link>
</p>
</div>
);
}
}
export default Home;
import React, { Component } from "react";
import { Header } from "semantic-ui-react";
class About extends Component {
render() {
return (
<div>
<Header as="h2">About Page</Header>
<p>Page is change without reload!</p>
</div>
);
}
}
export default About;
import React, { Component } from "react";
import { Icon, Header } from "semantic-ui-react";
class NotFound extends Component {
render() {
return (
<div>
<Icon name="minus circle" color="red" size="small" />
<strong>Page not found!</strong>
</div>
);
}
}
export default NotFound;
path 를 통해 해당 경로와 일치하는 컴포넌트를 렌더링해주고 그외는 모두 NotFound 가 렌더링 되게 됩니다.
yarn predeploy
yarn deploy
CRA로 만든 앱이 해당 homepage 에 호스팅 된걸 확인할 수 있습니다. https://juunone.github.io/react-spa-ghpages
참고 : 현재 데모링크로 올려놓은 페이지의경우는 cra + webpack + react-router-dom + gh-pages 로 구성된 SPA 환경입니다.