출저
- React Router 공식문서
- 위코드 수업자료
params 를 사용하는 것
, query 를 사용하는 것
이다. 현재는 params를 이용한 동적 라우팅에 대해서만 알아보겠다.라우트로 설정한 컴포넌트는, 3가지의 props 를 전달받게 된다.
import React, { Component } from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import Monsters from "./Assignments/Monsters/Monsters";
import Pagination from "./Lectures/Pagination/Coffee";
import UrlParameters from "./Lectures/UrlParameters/Monsters";
import MonsterDetail from "./Lectures/UrlParameters/MonsterDetail";
import MenuTab from "./Lectures/MenuTab/MenuTab";
import Lifecycle from "./Lectures/LifeCycle";
export default class Routes extends Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Monsters} />
<Route exact path="/monsters" component={UrlParameters} />
<Route exact path="/monsters/detail/" component={MonsterDetail} />
<Route exact path="/monsters/detail/:id" component={MonsterDetail} />
<Route exact path="/Pagination" component={Pagination} />
<Route exact path="/lifecycle" component={Lifecycle} />
</Switch>
</Router>
);
}
}
/monsters/detail/:id
라는 params를 지정해 주었다.import React, { Component } from "react";
import Card from "./Components/Card/Card";
import "./MonsterDetail.scss";
class MonsterDetail extends Component {
state = {
data: {},
};
componentDidMount() {
fetch(
`https://jsonplaceholder.typicode.com/users/${this.props.match.params.id}`
)
.then((res) => res.json())
.then((res) => this.setState({ data: res }));
}
componentDidUpdate(prevProps) {
if (prevProps.match.params.id !== this.props.match.params.id) {
fetch(
`https://jsonplaceholder.typicode.com/users/${this.props.match.params.id}`
)
.then((res) => res.json())
.then((res) => this.setState({ data: res }));
}
}
render() {
const { data } = this.state;
return (
<div className="url-parameters">
<div className="btn-wrapper">
<button>Back to Monsters List</button>
</div>
<Card id={data.id} name={data.name} email={data.email} />
<div className="btn-wrapper">
<button
onClick={() =>
this.props.history.push(
`/monsters/detail/${this.props.match.params.id - 1}`
)
}
>
Previous
</button>
<button
onClick={() =>
this.props.history.push(
`/monsters/detail/${+this.props.match.params.id + 1}`
)
}
>
Next
</button>
</div>
</div>
);
}
}
export default MonsterDetail;
this.props.match.params.id
자체는 string 이기 때문에 앞에 +를 붙여줬다.