componentDidMount()란 무엇일까
컴포넌트를 연동시켜주는것
componentDidMount() { fetch("https://jsonplaceholder.typicode.com/users") .then((res) => res.json()) .then((res) => this.setState({ monsters: res })); }
하나씩보면
즉
여기에 있는 monsters:[]이 안에 res가 들어가는것이다.
CardList.js(카드리스트 컴포넌트)를 Monsters.js에 호출해 state를 props로 받은 것이다.
이렇게 자식 컴포넌트에 넘김 이름을 monsters로 하고
monsters={filterMinster}는 뒷쪽에 상세히
Array.map()
함수를 활용하여 <Card />
컴포넌트를 리턴해주세요.Card.js
에게 넘겨줘야하는 props 는 각 몬스터 객체의 id
, name
, email
입니다.
위에서 componentDidMount()로 monster =[] 이안에 정보를 넣어져있다
여기에서 img는 src는 저 ${this.props.id}이 부분의 id숫자만 바뀌기 때문에 부모의 id를 받아옴
밑에 h2태그, p태그도 부모에게서 받은 props를 활용
render()에서 filterMonster는 검색창에 입력한 이름에 해당하는 데이터만 화면에 보여줘야 되는데, 실시간으로 값이 바뀌는 모습을 화면에 보여줘야 되서 render안에 있는것
부모에서 자식컴포넌트에 넘길 때
이런식으로 자식이 받을 함수를 이름을 정한 곳에 넣어서 넘기는 것
componentDidMount()는 컴포넌트를 연동시켜준다고 생각
fetch()는 ()안에 있는 정보를 가져오는 것이다
then의 res가 있는 부분은 가져온 정보의 이름이다.
첫번째 then은 가져온 정보를 json화 한 것
두번째 then은 가져온 정보에 조건을 다는 것
위에서는 가져온 정보를 state를 다시 세팅 할 건데
이 state={}안에 있는 monsters:[] 안에 넣겠다는 뜻이다.
(JSX에서 html과 js를 혼합하여 쓸 때만 {} 쓰는 것) 이걸 헷갈림...
.toLowerCase() 는 문자열을 소문자로 변환시켜주는 것
이것도 이제야 좀 알거 같다ㅠㅜ
부모한테서 받은 monsters는 지금 안에 배열안에 많은 el이 있는데 배열 안에 각각의 index에 접근해
여기에 있는 id, name, email을 추출?하고 그 것들을 각각 key, id, name, email이라고 이름을 지어 Card란 컴포넌트에 전해줌
그럼 Card컴포넌트에서
요로코롬 받을 수 있다~~~이 말입니다.
컴포넌트 같은 것이 헷갈릴 때는 아주 작은 것 부터
이번 monster로 예를들면
card => cardlist,searchbox => monsters
순으로 어떻게 props, state가 돌아는지 반대로 타고 타고 올라가보자 연어처럼!!!!