개발/React 학습

MAP()

RainyJune 2023. 3. 2. 22:39

JavaScript에서의 map()

Array에서 map method는 array 요소만큼 반복하여 map method 영역에 기술된 callback 함수를 반복한다.

map method 예제

let arrTest = [1, 2, 3];
let newValue = 4;
// map은 arrTest 내용을 반복탐색하며 callback 함수를 호출한다.
// parameter는 2개를 첫 번째 parameter는 arrTest의 값, 두 번째 parameter는 현재 반복문 실행 Index를 나타낸다.
arrTest.map( (val, arrIdx) => {
	console.log(`value:${val}, Index:${arrIdx}`);
    // value:1, idx:0
	// value:2, idx:1
	// value:3, idx
})

// 새로운 array에 array의 map을 통해 값을 바꿔 return 하면 바뀐 값으로 array가 생성된다.
let arrTest2 = arrTest.map((val) => { val + 3});
console.log(arrTest2);
// [4, 5, 6]

React에서 map()을 활용해 반복되는 UI구성을 단순화 하기

<div className="list">
  <h4>{ articleTitle[0] } <span onClick={ () => { setCntLike(cntLike + 1) } }>👍</span> { cntLike } </h4>
  <p>2월 17일 발행</p>
</div>
<div className="list">
  <h4>{ articleTitle[1] }</h4>
  <p>2월 17일 발행</p>
</div>
<div className="list">
  <h4 onClick={() => { switchModal() }}>{ articleTitle[2] }</h4>
  <p>2월 17일 발행</p>
</div>

위와 같이 동일한 <div></div> 형태가 반복되는 경우 map method를 통해 축약해서 구현할 수 있다.

  • articleTitle은 글의 제목을 나타내는 array state임.
  • 👍에 정의된 onClick 이벤트는 다른 article에 적용되어도 됨.
  • 제목을 클릭했을 때 호출되는 switchModal()도 호출되어도 됨.

아래와 같이 구현한다.

let [articleTitle, setArticleTitle] = useState(['제목1', '제목2', '제목3']); // 제목 array
let [cntLick, setCntLike] = useState(0, 0, 0); // 좋아요 개수

function updateCntLike(idx, value) {
  // cntLike의 특정 부분을 update
  let copy = [...cntLike];
  copy[idx] = value;
  setCntLike(copy);
}

{
  articleTitle.map(function(title, arrIdx) {
    return (
      <div className="list" key={arrIdx}>
        <h4 onClick={() => { switchModal() }}>{ title } <span onClick={() => { updateCntLike(arrIdx, cntLike[arrIdx] + 1) }}>👍</span> {cntLike[arrIdx]} </h4>
      </div>
    )
  })
}

 

'개발 > React 학습' 카테고리의 다른 글

글쓰기1  (0) 2023.03.06
props  (0) 2023.03.06
동적 UI  (0) 2023.03.02
Component  (0) 2023.02.28
Array, Object State  (0) 2023.02.28