1 . Router
- 컴포넌트들을 모두 분리하고 App에서는 페이지간 이동을 가능하게 하고 싶다.
- <Router> 안에서 <Switch>문을 사용하여 path가 다른 <Route>간 이동을 가능하게 한다.
import { BrowserRouter as Router, Switch, Route} from "react-router-dom";
import Home from "./routes/Home";
import Detail from "./routes/Detail"
function App() {
return (
<Router>
<Switch>
<Route path="/movie">
<Detail />
</Route>
<Route path="/">
<Home />
</Route>
</Switch>
</Router>
);
}
export default App;
2. Movie 컴포넌트 분리
- 컴포넌트를 출력할때 필요한 정보들은 props로 전달받아서 처리한다.
- propstype을 사용하여 전달받을 props를 명확히 해준다.
import PropTypes from "prop-types";
function Movie({coverImg, title, summary, genres}) {
return (
<div>
<div>
<img src={coverImg} alt={title}/>
<h2>{title}</h2>
<p>{summary}</p>
<ui>
{genres.map( g => (
<li key={g}>{g}</li>
))}
</ui>
</div>
</div>
);
}
Movie.propTypes = {
coverImg: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
summary: PropTypes.string.isRequired,
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
};
export default Movie;
3. url 전달받아서 페이지 전환하기
- Link to 로 url을 보내고
: HTML <a>처럼 전체 페이지를 다시 로딩하지 않고 바로 페이지를 옮겨준다.
- useParams 로 url을 받아온다
: 보내진 url을 바로 가져올수 있다.
import PropTypes from "prop-types";
import { Link } from "react-router-dom";
function Movie({ id, coverImg, title, summary, genres }) {
return (
<div>
<div>
<img src={coverImg} alt={title}/>
<h2><Link to={`/movie/${id}`}>{title}</Link></h2> // url을 보내는 함수
<p>{summary}</p>
<ui>
{genres.map( g => (
<li key={g}>{g}</li>
))}
</ui>
</div>
</div>
);
}
Movie.propTypes = {
id: PropTypes.number.isRequired,
coverImg: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
summary: PropTypes.string.isRequired,
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
};
export default Movie;
import { useParams } from "react-router-dom";
import { useEffect } from "react/cjs/react.development";
function Detail(){
const { id } = useParams(); // 전달받은 url을 가져오는 함수
const getMovies = async () => {
const json = await (
await fetch(`https://yts.mx/api/v2/movie_details.json?movie_id=${id}`)
).json();
console.log(json);
};
useEffect(()=> {
getMovies();
}, []);
return <h1>Deatil</h1>;
}
export default Detail;
'React' 카테고리의 다른 글
[ReactHooks] 1. useState (0) | 2022.02.02 |
---|---|
[React] 3. fetch (0) | 2022.01.29 |
[React] 1. Create React App (0) | 2022.01.26 |
[리액트] 정리 5 (0) | 2022.01.24 |
[리엑트] 정리 4 (0) | 2022.01.24 |