: 많은 div들을 반복문으로 줄이고 싶은 충동이 들 때
똑같은 div이 반복될때 for문을 사용하면 쉽게 div들을 만들 수 있는데
JSX에서는 for문을 사용하지 못하여 map함수를 사용한다.
map함수의 기본형은
var ary = [2,3,4];
ary.map(function(){
console.log(1)
});
위 코드는 ary안에 요소가 3개이므로 3번 function안에 내용을 반복해준다.
실행 결과 : console창에 1이 3번 출력된다.
( function(이거) 괄호 안에를 콜백함수라고 한다)
var ary = [2,3,4];
ary.map(function(a){
console.log(a)
});
실행 결과 : console창에 2,3,4 출력됨
var ary = [2,3,4];
var newArray = ary.map(function(a){
return a * 10
});
console.log(newArray)
위 코드는 일단 a는 array안에 있는 데이터들이니까
a * 10의 결과를 출력해주지 않을까 ?
실행결과 : 20, 30, 40
이런 기능들을 가진 map함수로 어떻게 html을 반복 생성하는 방법은
function App (){
return (
<div>
{
[1,2,3].map(function(){
return ( <div>안녕</div> )
})
}
</div>
)
}
위 코드는 안녕 이라는 내용이 담긴 div를 3번 만들어 준다.
실행 내용을 풀어보면
array.map(function(){
return ()
}
위 코드가 원형이고
array를 import해오지 않고 직접 붙였다.
[1, 2, 3] 자료 개수만큼 반복해주니 3번 반복해준다.
그리고 return 안에 내용을 3번 반복해주는데
return 안에
<div>안녕</div>
이렇게 적혀있으니 이 내용을 3번 반복해준다.
html상으로는
<div>안녕</div>
<div>안녕</div>
<div>안녕</div>
그러면 같은 코드만 반복하는 것이 아니라 반복하면서 일정 부분만 변경할 수 없을까 ?
이전에 사용했던 코드를 활용해보면
(생략)
let [글제목, 글제목변경] = useState( ['남자코트 추천', '강남 우동맛집', '파이썬 독학'] );
(생략)
function App (){
return (
<div>
(생략)
{
글제목.map(function(a){
return (
<div className="list">
<h4>{ a }</h4>
<p>2월 18일 발행</p>
</div> )
})
}
</div>
)
}
글제목이라는 array형 state를 가져오고 그 안에는 3개의 자료들이 존재하는데
아까 콜백함수에 아무렇게나 작명하면 array안의 자료형을 보여준다고 했다.
h4안에 { a }를 해주면 map함수가 돌아가면서
첫 번째 h4에는 array의 첫 번째 자료가 나오고
두 번째 h4에는 array의 두 번째 자료가 나오고
세 번째 h4에는 array의 세 번째 자료가 나오고
이렇게 된다.
아니면 이런 다른 방법으로는
function App (){
return (
<div>
(생략)
{
글제목.map(function(a, i){
return (
<div className="list">
<h4>{ 글제목[i] }</h4>
<p>2월 18일 발행</p>
</div> )
})
}
</div>
)
}
map(function(a, i){
이렇게 파라미터를 2개까지 작명 가능한데
첫번째 파라미터 a는 array안에 있던 자료
두번째 파라미터 i는 0부터 1씩 증가하는 정수가 되어서 그렇다.
그러면 첫번째 h4에는 글제목[1]이 들어가므로
글제목이라는 array의 첫번째 자료가 나오게 된다.
<div className="list" key={i}>
그래야 리엑트가 div들을 구분할 수 있기 때문이다.