diff --git a/react-clone/src/Movie.js b/react-clone/src/Movie.js index cd1f3af..e2cc754 100644 --- a/react-clone/src/Movie.js +++ b/react-clone/src/Movie.js @@ -1,34 +1,23 @@ -import { useEffect, useState } from "react"; +import { + BrowserRouter as Router, + Routes, + Route, + Link +} from "react-router-dom"; +import Home from "./routes/Home"; +import Detail from "./routes/Detail"; + function Movie() { - const [loading, setLoading] = useState(false); - const [movies, setMovies] = useState([]); - const getMovie = async () => { - const response = await fetch("https://yts.mx/api/v2/list_movies.json?minimum_rating=8.8&sort_by=year"); - const json = await response.json(); - setMovies(json.data.movies) - setLoading(true) - } - useEffect(() => { - getMovie() - }, []) - console.log(movies) - return ( -
- {loading ? null :

loading

} -
- {movies.map((movie) => ( -
- -

{movie.title}

-

{movie.summary}

-
    - {movie.genres.map((genres) =>
  • {genres}
  • )} -
-
- ))} -
-
- ) + return + + }> + }> + + } -export default Movie; \ No newline at end of file +export default Movie; + +/*Routes 컴포넌트 안에는 Route 컴포넌트만 존재해야함 +=> element 속성 안에 컴포넌트를 넣어줘야됨 +*/ \ No newline at end of file diff --git a/react-clone/src/components/Moviesub.js b/react-clone/src/components/Moviesub.js new file mode 100644 index 0000000..b68ef66 --- /dev/null +++ b/react-clone/src/components/Moviesub.js @@ -0,0 +1,25 @@ +import PropTypes from "prop-types" +import { Link } from "react-router-dom"; +function Moviesub({ id, coverImg, title, summary, genres }) { + return ( +
+ +

+ {title} +

+

{summary}

+ +
+ ) +} + +Moviesub.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 Moviesub; \ No newline at end of file diff --git a/react-clone/src/index.js b/react-clone/src/index.js index f27e47e..17c14c5 100644 --- a/react-clone/src/index.js +++ b/react-clone/src/index.js @@ -3,6 +3,8 @@ import ReactDOM from 'react-dom/client'; //import App from './App'; import Coin from './Coin'; import Movie from './Movie'; +import Home from './routes/Home'; + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( diff --git a/react-clone/src/routes/Detail.js b/react-clone/src/routes/Detail.js new file mode 100644 index 0000000..26a36b6 --- /dev/null +++ b/react-clone/src/routes/Detail.js @@ -0,0 +1,30 @@ +import { useEffect, useState } from "react"; +import { useParams } from "react-router-dom"; + +function Detail() { + const [loading, setLoading] = useState(true) + const [detail, setDetail] = useState(""); + const { id } = useParams(); + const getMovie = async () => { + const response = (await fetch(`https://yts.mx/api/v2/movie_details.json?movie_id=${id}`)); + console.log(response) + const json = await response.json() + console.log(json) + setDetail(json.data.movie) + setLoading(false) + } + useEffect(() => { + getMovie() + }, []) + return ( +
+

Detail

+ {loading ? null :
+ +
{detail.title}
+

{detail.description_full}

+
} +
+ ) +} +export default Detail; \ No newline at end of file diff --git a/react-clone/src/routes/Home.js b/react-clone/src/routes/Home.js new file mode 100644 index 0000000..7eebe8f --- /dev/null +++ b/react-clone/src/routes/Home.js @@ -0,0 +1,34 @@ +import { useState, useEffect } from "react"; +import Moviesub from "../components/Moviesub"; + +function Home() { + const [loading, setLoading] = useState(false); + const [movies, setMovies] = useState([]); + const getMovie = async () => { + const response = await fetch("https://yts.mx/api/v2/list_movies.json?minimum_rating=8.8&sort_by=year"); + const json = await response.json(); + setMovies(json.data.movies) + setLoading(true) + } + useEffect(() => { + getMovie() + }, []) + return ( +
+ {loading ? null :

loading

} +
+ {movies.map((movie) => ( + + ))} +
+
+ ) +} + +export default Home; \ No newline at end of file