리액트 까막눈인 나도 보이는 map()함수의 중요성...아주 많이 사용되는 것 같다.
나에겐 너무도 어려운 Map()..함수! 오늘로 너 정복한다.
<<오늘의 목표 더도 말고 덜도 말고 Map함수 뽀시기!>>
( •_•)>⌐■-■
🪐 Map() 함수의 정의
map() JavaScript의 배열 메서드 중 하나로, 반복되는 컴포넌트를 렌더링하기 위해 사용된다.
배열 내 각 요소를 원하는 규칙에 따라 변환한 후 새로운 배열 혹은 리스트를 생성한다.
react의 jsx에서는 if문과 같이 for문을 사용할 수 없어서, 반복문을 사용하려면 map함수를 써야한다!
🌌Map()함수 기본 구조
const newArray = array.map((currentValue, index, array) => {
return newValue;
});
currentValue : 현재 배열 요소의 값
index : 현재 배열 요소의 인덱스
array : 원본 배열
여기서 나는 굉장히 원초적인 질문들이 물음표 마냥 떠다녔다..
const로 선언된 배열 이름은 students
students의 배열을 map함수로 변경할 때 단수형인 student.map으로 쓰는 건지 궁금했다.
삐약이에겐 알파벳 하나 하나가 긴장 요소이다.
혹시 내가 모르는 규칙이 있을까봐 ::>_<::
지피티가 알려준 정답
배열은 복수형(students)으로, 배열의 각 요소는 단수형( student )으로 이름을 붙이는 것이 일반적인 패턴이다.
(그렇다..너무 쫄아있었다.)
(또 궁금했던 것..혹시나 저 같은 분이 있을 수 있으니.. 기록...)
1. map 뒤에 괄호가 2개일 때
map 뒤에 괄호가 2개일 때는 map 메소드에 전달하는 콜백 함수의 문법
const newArray = array.map((element) => { // 코드 블록 });
여기서 array.map((element) => { ... })는 map 메소드가 배열의 각 요소를 순회하면서
요소에 대해 콜백 함수 실행하여 새로운 배열을 만드는데 사용된다.
2. => 다음에 { 소괄호가 올 때
=> 다음에 {}가 오는 경우는 함수의 본문을 정의하는 부분
여기서 number => { return number * number; }는 number라는 인자를 받아서
{} 블록 안의 코드를 실행하는 화살표 함수 블록 내에서 return을 사용하여 결과를 반환한다.
3. => 다음에 {}가 없이 한 줄일 때
한 줄로 작성할 수도 있다.
🌍Map() 함수 예시
- Map함수를 이용해 <li>를 간결하게 만들어 보기!
function App(){
return(
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
)
}
const array = [1,2,3,4,5];
const listItems = array.map((item)=> <li>{item}</li>);
return(
<ul>{listItems}</ul>
);
array 배열의 각 요소를 반복하여, 새로운 배열 listItems을 만들고
이 배열을 렌더링해 ul리스트를 생성!
- Map()함수를 이용하여 numbers의 배열 요소들을 전부 *2 해보기!
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map((number) => {
return number * 2;
});
console.log(doubledNumbers); // [2, 4, 6, 8, 10]
map()을 사용하면 기존 배열을 변형하지 않고 새로운 배열 생성!
- 배열의 각 요소를 JSX 엘리먼트로 변환하여 목록 만들기!
const names = ["Alice", "Bob", "Charlie"];
const nameList = names.map((name, index) => {
return <li key={index}>{name}</li>;
});
[
<li key={0}>Alice</li>,
<li key={1}>Bob</li>,
<li key={2}>Charlie</li>
]
nameList의 JSX 배열을 생성
function NameList() {
return (
<ul>
{nameList}
</ul>
);
}
NameList 컴포넌트는 <ul> 엘리먼트 안에 nameList 배열을 삽입하여 <li> 요소들을 리스트로 렌더링.
🌝 Map함수 적용시 key props를 부여하는 이유
난 Key라는 개념이 어려웠다. key만 나오면 동공이 지진되는..
그래서 찾아보고 정리해본 Key. 알고보면 어렵지 않은 너
<<key=주민등록번호다>>
- key는 배열 원소 하나 하나를 정확하게 알 수 있는 문자열 어트리뷰트.
- 배열의 원소들을 추가, 삭제, 변경할 때 식별할 수 있는 고유의 값.
- map 함수 인자로 전달되는 함수 내부에서 컴포넌트 props를 설정하는 것과 동일하게 작성!
(위 말이 이해가 안가서 찾아봤어요...함수 인자..props...?)
const users = [
{ id: 1, name: "Alice", age: 25 },
{ id: 2, name: "Bob", age: 30 },
{ id: 3, name: "Charlie", age: 35 },
];
const userList = users.map((user) => {
return <User key={user.id} name={user.name} age={user.age} />;
});
users.map((user) => {...}):
map을 사용해 users 배열을 순회하면서 각 사용자 객체를 User 컴포넌트로 변환
<User key={user.id} name={user.name} age={user.age} />:
각 사용자 객체의 id, name, age를 User 컴포넌트의 key, name, age라는 props로 전달
key={user.id}:
React에서 각 컴포넌트는 고유한 key값을 id 주었음
function User({ name, age }) {
return (
<li>
{name} is {age} years old.
</li>
);
}
----------------------------------------
//usrList 렌더링 결과
<ul>
<li>Alice is 25 years old.</li>
<li>Bob is 30 years old.</li>
<li>Charlie is 35 years old.</li>
</ul>
🤷♂️Map()함수의 Key+1이 붙는 이유(공부하면서 어려웠던 부분)
import React from "react";
function SkillsList() {
const skillText = ["HTML", "CSS", "JavaScript", "React"];
return (
<ul>
{skillText.map((skill, key) => (
<li key={key}>
<span>{key + 1}. </span> {/* key는 0부터 시작하므로 +1을 해서 1부터 번호를 부여 */}
{skill}
</li>
))}
</ul>
);
}
export default SkillsList;
리액트로 포트폴리오를 만드는 중에 Key값에 왜 1이 붙을지 궁금해졌다.
key는 map 함수에서 자동으로 제공되는 배열 요소의 인덱스로, 0부터 시작
<span>{key + 1}. </span>
key + 1을 통해 인덱스 값에 1을 더해준다.
이로 인해 인덱스 0, 1, 2, 3이 각각 1, 2, 3, 4로 변환되어,
화면에 사용자에게는 "1.", "2.", "3.", "4."로 표시된다.
예시)
key가 0일 때, key + 1은 1이 되어 첫 번째 항목은 "1."로 표시
key가 1일 때, key + 1은 2가 되어 두 번째 항목은 "2."로 표시
key + 1을 사용하여 각 항목에 1부터 시작하는 번호 부여
🐱👤결론
- map 함수로 여러 컴포넌트를 불러올 수 있는 큰 장점이 있다.
- 불변성을 유지한다.(기존 배열 변경x, 새로운 배열 반환)
- 코드가 간결하고 가독성이 좋다.
- 다양한 변환 작업 처리에 좋다.
🎅내 생각
map함수 어렵다고 흐린 눈 하면서 지나쳤는데, for문보다 재밌다.
역시 배움에는 끝이 없습니다.
GPT에게 Map함수 문제 내달라고 하고 풀기를 5번, 이제야 나는 감을 잡았다.
집 가기전까지 3문제만 더 풀어보고 포트폴리오 수정을 하러 총총
🧐참고 사이트
@chatGPT
'developer Studying > React' 카테고리의 다른 글
[react] Props 낱낱이 파헤치기 (1) | 2024.09.10 |
---|---|
[react] Component와 Component의 라이프 사이클(Lifecycle) (2) | 2024.09.09 |