map 연습

Jivyy·2020년 5월 31일
0

WECODE

목록 보기
20/20
import React, { Component } from "react";
import SearchBox from "./components/SearchBox/SearchBox";
import CardList from "./components/CardList/CardList";
import "./App.css";

/**********************************************************
  API 주소: https://jsonplaceholder.typicode.com/users

  1. 위 주소를 호출하여 데이터 로딩을 처리해주세요!
    - componentDidMount()
    - fetch
    - setState (monsters 에 저장)

  2. SearchBox 컴포넌트에 정의한 handleChange 메소드를 넘겨주고, 
     호출 시 인자로 들어오는 이벤트객체(e)를 활용해 userInput 으로 setState.

  3. 필터링 로직 구현 (filter 메소드 활용)
      여기서 비교 대상은 monster 객체의 name 값입니다.
      소문자로 바꾼 monster.name 값과 userInput값을 비교.
      filter 메소드가 반환하는 값을 변수에 저장 후 return 문 안에 CardList에 props로 전달
***********************************************************/

class App extends Component {
  state = {
    monsters: [],
    userInput: "",
  };


componentDidMount(){
  fetch("https://jsonplaceholder.typicode.com/users")
  .then(res => res.json())
  .then(res => this.setState({monsters:res}))
}

handleChange=(e)=>{
  this.setState({userInput:e.target.value});
}
  
  // 데이터 로딩

  // SearchBox에 props로 넘겨줄 handleChange 메소드 정의

  render() {
    // 필터링 로직

    return (
      <div className="App">
        <h1>컴포넌트 재사용 연습!</h1>
        <CardList monsters={this.state.monsters}/> 
        <SearchBox onChange={this.handleChange} />
        {/* <SearchBox handleChange=정의한메소드 /> */}
        {/* <CardList monsters=필터링 된 몬스터리스트 /> */}
      </div>
    );
  }
}

export default App;
import React, { Component } from "react";
import Card from "../Card/Card";
import "./CardList.css";

/***********************************************************
  Card 컴포넌트를 import 한 뒤, props로 내려받은 데이터에 
  map 함수를 호출해 각각 다른 데이터를 가진 Card 컴포넌트들을 리턴해주세요!
  Card 컴포넌트에서 필요로 하는 데이터는 id, name, email 입니다.
***********************************************************/

class CardList extends Component {
  render() {
    return (
      <div className="card-list">
        {this.props.monsters.map((monsters) => {
          return;
          <Card id={monsters.id} name={monsters.name} email={monsters.email} />;
        })}
      </div>
    );
  }
}

export default CardList;
import React, { Component } from "react";
import "./Card.css";

/***********************************************************
  Card 컴포넌트 구조
    <img src=이미지주소 alt="">
	  <h2>Name</h2>
	  <p>Email</p>

  Card 컴포넌트에서 props로 받아야하는 데이터는 id, name, email 입니다.
  props에서 해당하는 키값들을 추출하여 위와 같은 구조로 만들어주세요!

  이미지주소: `https://robohash.org/${숫자}?set=set2&size=180x180`
  카드마다 다른 이미지를 보여주기 위해
  위 주소의 숫자 부분을 props로 내려받은 id로 대체하셔야 합니다.

  Name 과 Email 도 마찬가지입니다.
***********************************************************/

class Card extends Component {
  render() {
    return <div className="card-container">
              <img src={`https://robohash.org/${this.props.id}?set=set2&size=180x180`} alt=""/>
              <h2>{this.props.name}</h2>
              <p>{this.props.email}</p>
           </div>
    ;
  }
}

export default Card;
profile
나만의 속도로

0개의 댓글