티스토리 뷰
728x90
https://reactrouter.com/en/main/router-components/browser-router
++ 공식문서 업데이트 참고해야함!!
1. css 꾸미기
components 의 Movies.js 수정
import PropTypes from "prop-types";
import {Link} from "react-router-dom";
import styles from "./Movie.module.css";
function Movie({id, coverImg, title, year, summary, genres}) {
return (
<div className={styles.movie}>
<img src={coverImg} alt={title} className={styles.movie__img} />
<div>
<h2 className={styles.movie__title}>
<Link to={`/movie/${id}`}>{title}</Link>
</h2>
<h3 className={styles.movie__year}>{year}</h3>
<p>{summary.length > 235 ? `${summary.slice(0,235)}...` : summary}</p>
<ul className={styles.movie__genres}>
{genres.map((g) => (
<li key={g}>{g}</li>
))}
</ul>
</div>
</div>
);
}
Movie.prototype = {
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;
components 에 Movie.module.css 파일을 추가해서 css 를 입력해준다.
.movie {
background-color: white;
margin-bottom: 70px;
font-weight: 300;
padding: 20px;
border-radius: 5px;
color: #adaeb9;
display: grid;
grid-template-columns: minmax(150px, 1fr) 2fr;
grid-gap: 20px;
text-decoration: none;
color: inherit;
box-shadow: 0 13px 27px -5px rgba(50, 50, 93, 0.25),
0 8px 16px -8px rgba(0, 0, 0, 0.3), 0 -6px 16px -6px rgba(0, 0, 0, 0.025);
}
.movie__img {
position: relative;
top: -50px;
max-width: 150px;
width: 100%;
margin-right: 30px;
box-shadow: 0 30px 60px -12px rgba(50, 50, 93, 0.25),
0 18px 36px -18px rgba(0, 0, 0, 0.3), 0 -12px 36px -8px rgba(0, 0, 0, 0.025);
}
.movie__title,
.movie__year {
margin: 0;
font-weight: 300;
text-decoration: none;
}
.movie__title a {
margin-bottom: 5px;
font-size: 24px;
color: #2c2c2c;
text-decoration: none;
}
.movie__genres {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-wrap: wrap;
margin: 5px 0px;
}
.movie__genres li,
.movie__year {
margin-right: 10px;
font-size: 14px;
}
routes 의 Home.js 를 바꾸어준다.
import { useEffect, useState } from "react";
import Movie from "../components/Movie";
import styles from "./Home.module.css";
function Home() {
const [loading, setLoading] = useState(true);
const [movies, setMovies] = useState([]);
const getMovies = async () => {
const response = await fetch(
`https://yts.mx/api/v2/list_movies.json?minimum_rating=8.5&sort_by=year`
);
const json = await response.json();
setMovies(json.data.movies);
setLoading(false);
};
useEffect(() => {
getMovies();
}, []);
return (
<div className={styles.container}>
{loading ? (
<duv className={styles.loader}>
<span>Loading ...</span>
</duv>) :
(<div className={styles.movies}>
{movies.map((movie) => (
<Movie
id={movie.id}
year={movie.year}
coverImg={movie.medium_cover_image}
title={movie.title}
summary={movie.summary}
genres={movie.genres}
/>
))}
</div>)}
</div>
);
}
export default Home;
routes 의 Home.module.css 파일을 추가해서 css 를 입력해준다.
.container {
height: 100%;
display: flex;
justify-content: center;
}
.loader {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-weight: 300;
}
.movies {
display: grid;
grid-template-columns: repeat(2, minmax(400px, 1fr));
grid-gap: 100px;
padding: 50px;
width: 80%;
padding-top: 70px;
}
@media screen and (max-width: 1090px) {
.movies {
grid-template-columns: 1fr;
width: 100%;
}
}
index.js 파일을 수정해줌
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import "./styles.css"
ReactDOM.render(
<App />,
document.getElementById("root")
);
styles.css 파일을 만들어서 css 를 넣어줌
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
background-color: #eff3f7;
height: 100%;
}
반응형
'React (Javascript) 공부' 카테고리의 다른 글
24.05.22_TIL React (리엑트) _ 5. 영화사이트 만들기 (React Router)+깃허브 배포 (0) | 2024.05.22 |
---|---|
24.05.21_TIL React (리엑트) _ 4. to-do-list, Coin Tracker, Movie site (0) | 2024.05.21 |
24.05.20_TIL React (리엑트) _ 3. useEffect & Cleanup function (0) | 2024.05.20 |
24.05.17_TIL React (리엑트) _ 2. npm 실행, 버튼 만들기 (0) | 2024.05.17 |
24.05.17_TIL React (리엑트) _ 1. 함수변경 (분, 시를 변경해보자), props (0) | 2024.05.17 |