들어가기전
아래와 같이 비슷하게 생긴 Component 들을 하나, 하나 만드는 것이 아니라
공통되는 Component 를 만들고 반복을 통하여 그려냅니다.
Array 를 반복하며 그리는데 일반적으로 map 을 가장 많이 이용합니다.
실습
프로젝트는 초기 세팅 상태 로 진행되어집니다. +@ 로 이제는 styled-component 를 이용하기 때문에 App.css 파일이 필요없습니다.
웹툰을 그리기 위한 State 를 준비합니다.
Copy // App.js
import React from 'react'
class App extends React . Component {
state = {
webtoons : [{
title : '여신강림' ,
src: 'https://shared-comic.pstatic.net/thumb/webtoon/703846/thumbnail/thumbnail_IMAG10_35503130-16ce-4236-b913-0fe76226de36.jpg'
} ,
{
title : '약한영웅' ,
src: 'https://shared-comic.pstatic.net/thumb/webtoon/710751/thumbnail/thumbnail_IMAG10_eed99ea4-5908-4445-b89a-d3881797f909.jpg'
} ,
{
title : '외모지상주의' ,
src : 'https://shared-comic.pstatic.net/thumb/webtoon/641253/thumbnail/title_thumbnail_20141120112141_t83x90.jpg'
}]
}
render () {
return (
< div ></ div >
)
}
}
export default App
웹툰 Component 를 추가합니다.
Webtoon Component 는 Props 를 받아 그려주는 역할을 합니다.
예전에는 이런 경우 Functional Component 를 이용하는것이 일반적이었습니다.
다른 부가 기능들 state 를 가지고 있다던지, life cycle 같은 것이 필요하다면 Class Component 를 이용하는것이 일반적이었습니다.
하지만 Hook 의 등장으로 이런 사용 경계도 무너졌습니다. 요즘은 다 Functional Component 를 이용합니다.
Copy // src/components/webtoon.js
import React from 'react'
import styled from 'styled-components'
const WebtoonContainer = styled . div `
width: 80px;
text-align: center;
`
const Image = styled . img `
width: 100%;
vertical-align: top;
`
const Title = styled . div `
display: block;
overflow: hidden;
margin-bottom: 1px;
font-size: 11px;
color: #434343;
letter-spacing: 0;
white-space: nowrap;
text-overflow: ellipsis;
`
function Webtoon ({ title , src }) {
return (
< WebtoonContainer >
< Image src = {src}/>
< Title >{title}</ Title >
</ WebtoonContainer >
)
}
export default Webtoon
이제 App.js 에서 만든 Webtoon Component 를 불러와 Loop 을 돌면서 그려주면됩니다.
Copy // App.js
import React from 'react'
import Webtoon from './components/webtoon'
class App extends React . Component {
state = {
webtoons : [{
title : '여신강림' ,
src: 'https://shared-comic.pstatic.net/thumb/webtoon/703846/thumbnail/thumbnail_IMAG10_35503130-16ce-4236-b913-0fe76226de36.jpg'
} ,
{
title : '약한영웅' ,
src: 'https://shared-comic.pstatic.net/thumb/webtoon/710751/thumbnail/thumbnail_IMAG10_eed99ea4-5908-4445-b89a-d3881797f909.jpg'
} ,
{
title : '외모지상주의' ,
src : 'https://shared-comic.pstatic.net/thumb/webtoon/641253/thumbnail/title_thumbnail_20141120112141_t83x90.jpg'
}]
}
render () {
const { webtoons } = this .state
return (
< div >
{ webtoons .map (({ src , title }) => (< Webtoon src = {src} title = {title} />))}
</ div >
)
}
}
export default App
아래의 문법이 익숙하지 않다면 Destructuring 과 Arrow Function 에 대한 학습이 필요합니다. Arrow Function 에서 {} 가 생각된다면 return 을 하겠다는 의미와 같습니다.
Copy webtoons .map (({ src , title }) => (< Webtoon src = {src} title = {title} />))}