Monster.js
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: "",
};
handleChange = (e) => {
const inputValue = e.target.value;
this.setState({
userInput: inputValue,
});
};
componentDidMount() {
fetch("https://jsonplaceholder.typicode.com/users")
.then((res) => res.json())
.then((res) => console.log("결과1", res))
.then((res) => console.log("결과2", res));
}
render() {
console.log(this.state);
const filterData = this.state.monsters.filter((el) =>
el.name.toLowerCase().includes(this.state.userInput)
);
return (
<div className="Monsters">
<h1>컴포넌트 재사용 연습!</h1>
<SearchBox handleChange={this.handleChange} />
<CardList monsters={filterData} />
</div>
);
}
}
export default Monsters;
SearchBox.js
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;
CardList.js
import React, { Component } from "react";
import Card from "../Card/Card";
import "./CardList.scss";
class CardList extends Component {
render() {
console.log(this.props);
return (
<div className="card-list">
{this.props.monsters.map((el) => {
return <Card id={el.id} name={el.name} email={el.email} />;
})}
</div>
);
}
}
export default CardList;
Card.js
import React, { Component } from "react";
import "./Card.scss";
class Card extends Component {
render() {
return (
<div className="card-container">
<img
src={`https://robohash.org/${this.props.id}?set=set2&size=180x180`}
alt="monster-image"
/>
<h2>{this.props.name}</h2>
<p>{this.props.email}</p>
</div>
);
}
}
export default Card;