내가 했던 실수
1) useEffect()를 사용해서 Data 붙여주기
import React, { useState, useEffect } from "react";
const API = '[https://jsonplaceholder.typicode.com/users](https://jsonplaceholder.typicode.com/users)'
useEffect(() => {
fetch(API, {
method: "GET"
})
.then(response => response.json())
.then(result => console.log("result :", result));
},[])
데이터가 잘 들어오는 지 확인 후, setState에 data를 넣어 주었다🔻
import React, { useState, useEffect } from "react";
const [ monsters, setMonsters ] = useState([]);
const API = '[https://jsonplaceholder.typicode.com/users](https://jsonplaceholder.typicode.com/users)'
useEffect(() => {
fetch(API)
.then(response => response.json())
.then(result => setMonsters(result));
},[])
Monster.js를 하면서 알게 됐던 점
useEffect(() => {
fetch(API)
.then(response => response.json())
.then(result => console.log("result :", result));
},[])
Monster.js에서 했던 실수
map()
메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
실수한 코드 🔻
return (
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
{monsters.map((monsters) => (
<CardList monsters={monsters} />
))}
</div>
);
다시 바꾼 코드 🔻
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
<CardList monsters={monsters} />
</div>
해결방안
function CardList({monsters}) {
return <div className="cardList">
{
monsters.map(monster =>
<Card key={monster.id} id={monster.id} name={monster.name} email={monster.email}/>)
}
</div>;
}
CardList.js하면서 알게된 점
ex)
첫번째 방법: props를 넘겨준다. props.monsters.map(monster → monster)
두번째 방법: props를 넘겨준다. const { monsters } = props로 사용한다. monsters.map
세번째 방법: function Cardlist({monsters}){} 로 받아온다. 이 방법이 코드를 간략하게 쓸 수 있어 유용하게 쓰일 것 같다!
function CardList({monsters}) {
return <div className="cardList">
{
monsters.map(monster =>
<Card key={monster.id} id={monster.id} name={monster.name} email={monster.email}/>)
}
</div>;
}
function Card({ id, name, email}) {
return (
<div className="cardContainer">
<img src={`https://robohash.org/${id}?set=set2&size=180x180`} alt="monster" />
<h2>{name}</h2>
<p>{email}</p>
</div>
)
}
Input에서 monster 이름을 찾기
const [userInput, setUserInput] = useState("");
// SearchBox 에 props로 넘겨줄 handleChange 메소드 정의
const handleChange = ( event) => {
setUserInput(event.target.value);
}
const serachMonster = monsters.filter(monster =>
monster.name.toLowerCase().includes(userInput.toLowerCase())
)
return (
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
<SearchBox handleChange={handleChange} />
<CardList monsters={serachMonster} />
</div>
);
내가 했던 실수
먼저, input에 event,target.value 값을 받아야와겠다 라는 생각이 들었다.
setUserInput안에 받아온 값을 넣어주면 되겠다고 생각
const handleChange = (event) => {
setUserInput(event.target.value)
}
const searchMonsters = monsters.filter(monster =>
return monster.name.toLowerCase().includes(userInput.toLowerCase())
)
잘못한 실수
내가 실수한 코드
return (
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
<SearchBox handleChange={handleChange} />
<CardList monsters={monsters} searchMonsters={searchMonsters}/>
</div>
)
수정 코드
return (
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
<SearchBox handleChange={handleChange} />
<CardList monsters={searchMonsters}/>
</div>
)