todo.js
import { useState, useEffect } from "react"
function App() {
const [toDo, setToDo] = useState("");
const [toDos, setToDos] = useState([]);
const onChange = (event) => setToDo(event.target.value);
const onSubmit = (event) => {
event.preventDefault();
if (toDo === "") {
return;
}
setToDo("");
setToDos(currentArray => [toDo, ...currentArray])
//toDo에 currentArray속 element 갖다 붙히기
}
console.log(toDos)
return (
<div className="App">
<h1>My To Dos({toDos.length})</h1>
<form onSubmit={onSubmit}>
<input
onChange={onChange}
value={toDo}
type="text"
placeholder="Write your to do"
/>
<button>Add to do</button>
</form>
<hr/>
<ul>
{toDos.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
export default App;
coin.js
import { useState, useEffect } from "react";
function App() {
const [loading, setLoading] = useState(true);
const [coins, setCoins] = useState([])
useEffect(() => {
fetch("<https://api.coinpaprika.com/v1/tickers?limit=10>")
.then((response) => response.json())
.then((json) => {
setCoins(json);
setLoading(false);
})
}, [])
return (
<div className="App">
<h1>The Coins! {loading ? "" : `(${coins.length})`}</h1>
{loading ? (<strong>Loading</strong>
) : (
<select>
{coins.map((coin) => (
<option key={coin.id}>
{coin.name} ({coin.symbol}) : ${coin.quotes.USD.price} USD
</option>
))}
</select>
)}
</div>
);
}
export default App;
App.js
import { useEffect, useState } from "react";
import Movie from "../components/Movie";
function App() {
return null;
}
export default App;
Home.js
import { useEffect, useState } from "react";
import Movie from "./components/Movie";
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.8&sort_by=year>"
);
const json = await response.json();
setMovies(json.data.movies);
setLoading(false);
}
useEffect(() => {
getMovies();
}, [])
return (
<div className="App">
{loading ? (
<h1>Loading</h1>
) : (
<div>
{movies.map((movie) => (
<Movie
key={movie.id}
coverImg={movie.medium_cover_image}
title={movie.title}
summary={movie.summary}
genres={movie.genres}
/>
))}
</div>
)}
</div>
);
}
export default Home;
Movie.js
import React from 'react'
import PropTypes from "prop-types"
export default function Movie({coverImg, title, summary, genres}) {
return (
<div>
<img src={coverImg} alt={title}/>
<h2>{title}</h2>
<p>{summary}</p>
<ul>
{genres && genres.map((g)=> (<li key={g}>{g}</li>))}
</ul>
</div>
)
}
Movie.propTypes = {
coverImg : PropTypes.string.isRequired,
title : PropTypes.string.isRequired,
summary : PropTypes.string.isRequired,
genres : PropTypes.arrayOf(PropTypes.string).isRequired
};
Detail.js
function Detail() {
return <h1>Detail</h1>;
}
export default Detail;