(1). index.js에 BrowserRouter적용하기.
BrowserRouter는 웹 브라우저가 가지고 있는 주소 관련 정보를 props로 넘겨주는 친구이다. 현재 내가 어느 주소를 보고 있는 지 쉽게 알 수 있게 도와준다.
import React from 'react';
import ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom";
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
// 이부분이 index.html에 있는 div#root에 우리가 만든 컴포넌트를 실제로 랜더링하도록 연결해주는 부분입니다.
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById("root")
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
(2). 세부 화면 만들기.
import React from "react";
const Home = (props) => {
return (
<div>메인 화면이에요.</div>
)
}
export default Home;
import React from "react";
const Cat = (props) => {
return (
<div>고양이 화면이에요.</div>
)
}
export default Cat;
import React from "react";
const Dog = (props) => {
return (
<div>강아지 화면이에요.</div>
)
}
export default Dog;
(3). App.js에서 Route 적용하기.
<Route path="주소[/home 처럼 /와 주소를 적어요]" component={[보여줄 컴포넌트]}/>
<Route path="주소[/home 처럼 /와 주소를 적어요]" render={(props) => (<BucketList list={this.state.list} />)} />
import React from 'react';
import logo from './logo.svg';
import './App.css';
// Route를 먼저 불러와줍니다.
import { Route } from "react-router-dom";
// 세부 페이지가 되어줄 컴포넌트들도 불러와주고요!
import Home from "./Home";
import Cat from "./Cat";
import Dog from "./Dog";
class App extends React.Component {
constructor(props){
super(props);
this.state={};
}
render(){
return (
<div className="App">
{/* 실제로 연결해볼까요! */}
<Route path="/" component={Home} />
<Route path="/cat" component={Cat} />
<Route path="/dog" component={Dog} />
</div>
);
}
}
export default App;
(4). exact 적용하기.
화면을 확인해봤더니, /cat과 /dog에서는 자꾸 Home 컴포넌트가 같이 나오는데 이유는 "/"이 기호가 "/cat"과 "/dog"에도 포함되어 있어서 그렇다. 아래처럼 exact를 추가하고 다시 주소를 이동해보면 된다.
import React from 'react';
import logo from './logo.svg';
import './App.css';
// Route를 먼저 불러와줍니다.
import { Route } from "react-router-dom";
// 세부 페이지가 되어줄 컴포넌트들도 불러와주고요!
import Home from "./Home";
import Cat from "./Cat";
import Dog from "./Dog";
class App extends React.Component {
constructor(props){
super(props);
this.state={};
}
render(){
return (
<div className="App">
{/* 실제로 연결해볼까요! */}
<Route path="/" exact component={Home} />
<Route path="/cat" component={Cat} />
<Route path="/dog" component={Dog} />
</div>
);
}
}
export default App;
(5). URL 파라미터 사용하기.
//App.js
...
// 파라미터 주기
<Route path="/cat/:cat_name" component={Cat}/>
...
//Cat.js
import React from "react";
const Cat = (props) => {
console.log(props.match);
return (
<div>고양이 화면이에요.</div>
)
}
export default Cat;
(6). 링크 이동 시키기.
매번 주소창을 찍고 페이지를 돌아다닐 순 없다. react-router-dom으로 페이지를 이동하는 방법을 알아볼 것이다.
Link 사용하기.
링크 컴포넌트는 HTML 중 a 태그와 비슷한 역할을 한다. 리액트 내에서 페이지 전환을 도와준다.
<Link to="주소">[텍스트]</Link>
import React from 'react';
import logo from './logo.svg';
import './App.css';
// Route를 먼저 불러와줍니다.
// Link 컴포넌트도 불러왔어요.
import { Route, Link } from "react-router-dom";
// 세부 페이지가 되어줄 컴포넌트들도 불러와주고요!
import Home from "./Home";
import Cat from "./Cat";
import Dog from "./Dog";
class App extends React.Component {
constructor(props){
super(props);
this.state={};
}
render(){
return (
<div className="App">
<div>
<Link to="/">Home으로 가기</Link>
<Link to="/cat">Cat으로 가기</Link>
<Link to="/dog">Dog으로 가기</Link>
</div>
<hr />
{/* 실제로 연결해볼까요! */}
<Route path="/" exact component={Home} />
<Route path="/cat" component={Cat} />
<Route path="/dog" component={Dog} />
</div>
);
}
}
export default App;
...
componentDidMount(){
console.log(this.props);
}
...
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { withRouter } from "react-router";
// Route를 먼저 불러와줍니다.
// Link 컴포넌트도 불러왔어요.
import { Route, Link } from "react-router-dom";
// 세부 페이지가 되어줄 컴포넌트들도 불러와주고요!
import Home from "./Home";
import Cat from "./Cat";
import Dog from "./Dog";
class App extends React.Component {
...
}
// 내보내는 부분에서 withRouter로 감싸줍니다
export default withRouter(App);
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { withRouter } from "react-router";
// Route를 먼저 불러와줍니다.
// Link 컴포넌트도 불러왔어요.
import { Route, Link } from "react-router-dom";
// 세부 페이지가 되어줄 컴포넌트들도 불러와주고요!
import Home from "./Home";
import Cat from "./Cat";
import Dog from "./Dog";
class App extends React.Component {
constructor(props){
super(props);
this.state={};
}
componentDidMount(){
console.log(this.props);
}
render(){
return (
<div className="App">
<div>
<Link to="/">Home으로 가기</Link>
<Link to="/cat">Cat으로 가기</Link>
<Link to="/dog">Dog으로 가기</Link>
</div>
<hr />
{/* 실제로 연결해볼까요! */}
<Route path="/" exact component={Home} />
<Route path="/cat" component={Cat} />
<Route path="/dog" component={Dog} />
<button onClick={() => {
// props에 있는 history를 사용합니다.
// push([이동할 주소])는 페이지를 이동시켜 줍니다.
this.props.history.push('/cat');
}}>
/cat으로 가기
</button>
<button onClick={()=>{
// goBack()은 뒤로가기 예요.
this.props.history.goBack();
}}>뒤로가기
</button>
</div>
);
}
}
// 내보내는 부분에서 withRouter로 감싸줍니다
export default withRouter(App);