import React, { Component } from "react";
import SearchBox from "./Components/SearchBox/SearchBox";
import CardList from "./Components/CardList/CardList";
import "./Monsters.scss";
class Monsters extends Component {
state = {
monsters: [],
userInput: ""
};
componentDidMount(){
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => res.json())
.then(res => {
console.log("결과: ", res)
this.setState ({ monsters: res });
});
}
handleChange = e => {
this.setState({
userInput: e.target.value,
})
}
render() {
const{ userInput,monsters } = this.state
const result = monsters.filter((monster) =>
monster.name.toLowerCase().includes(userInput))
return (
<div className="Monsters">
<h1>컴포넌트 재사용 연습!</h1>
<SearchBox handleChange={ this.handleChange } />
<CardList monsters={result} />
</div>
);
}
}
export default Monsters;
import React, { Component } from "react";
import "./SearchBox.scss";
class SearchBox extends Component {
render() {
return (
<input
className="search"
type="search"
placeholder="Search..."
onChange={this.props.handleChange}
/>
);
}
}
export default SearchBox;
import React, { Component } from "react";
import Monsters from "../../Monsters";
import Card from "../Card/Card";
import "./CardList.scss";
class CardList extends Component {
render() {
const {monsters} = this.props
const list = monsters.map((card) =>
<Card
key={card.id}
id={ card.id }
name={card.name}
email={ card.eamil }
/>)
return <div className="card-list"> { list } </div>
}
}
export default CardList;
import React, { Component } from "react";
import "./Card.scss";
class Card extends Component {
render() {
const { id, name, email } = this.props;
return (
<div className="card-container">
<img src={`https://robohash.org/${id}?set=set2&size=180x180`} alt="" />
<h2>{name}</h2>
<p>{email}</p>
</div>
);
}
}
export default Card;