| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- googleicon
- npm start
- MediaQuery
- 그누보드반응형
- react npm install
- git lab clone
- 이미지반응형
- 플러그인
- 글자들여쓰기
- maxwidth
- XEIcon
- owlcarousel
- minwidth
- slickslider
- Git clone
- node 오류
- 동적객체
- npm install
- vscode git clone
- node설치
- 정적객체
- package.json
- legacy-peer
- 아이콘사용법
- 의존성문제
- npm install 문제
- 웹아이콘
- fontawesome
- window 정책변경
- 단어단위로떨어지기
- Today
- Total
어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ
[문법] .map() 메서드 이용해서 반복 줄이기 본문
li로 반복해서 나열했던 부분을 어떻게 더 줄일까 생각하다가 .map() 이라는 메서드를 발견했다!

개념
- [array].map(콜백함수(){ 반복할 것});
- array 안에 자료 갯수 만큼 콜백함수안의 코드(반복할 것)를 반복해줌
function App() {
[1,2,3].map(function(){
console.log('안녕');
});
}

=> 이러면 console.log('안녕'); 이 3번 찍힌다.
1. 파라미터 사용
- [array].map(콜백함수(파라미터){ 반복할 것});
📌 파라미터란? => ( 👩🏻: 자바스크립트의 함수 매개변수처럼 동작!!)
1. 컴포넌트 간 데이터 전달 (Props)
- 파라미터의 개념은 리액트에서 **Props(프로퍼티)**
- Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용하는 객체
- 함수나 클래스 컴포넌트에서 매개변수(parameter)처럼 사용
2. 이벤트 핸들러 파라미터
- 특정 동작에 데이터를 전달하기 위해 함수에 인수로 전달.
function App() {
[1,2,3].map(function(a){
console.log('a');
});
}

=> 1 2 3 1 2 3 이 찍힌다
👩🏻:
❓ 왜냐고?
a(파라미터)는 array 자료에 있는 데이터들을 가리킨다!

??? 근데 여기서 내 문제점은 한번만 나와야 할 숫자들이 2번씩 호출된다는 것!
그래서 찾아보니 StrictMode 때문!
📌 React.StrictMode가 두 번 실행되도록 설계된 이유는 상태 관리와 렌더링 문제를 조기에 파악하기 위함
실제 배포 시에는 StrictMode의 영향이 없으므로, 두 번 실행되는 문제는 신경 쓰지 않아도 된다고는 하지만 내가 불편해!!!
해결방법=>

App.jsx를 main.jsx에서 import 시키고 있기 때문에 main.jsx에서 <StrictMode> 주석 처리!
하니까 원하던 대로 한 번 씩만 출력된다!!

휴우.. 별거 아니라도 문제가 발생하면 당황하게 된다!
그치만 해결하면 뿌듯하다>.,<
오류를 잘 해결해가는 것도 중요하다고 생각한다!
2. return 이용하기
- return 안의 값을 array 안의 데이터 갯수만큼 반복

응용
import { useState } from 'react'
function App() {
let [나이, 나이변경] = useState([
['민수', 20],
['영희', 32],
['순신', 5],
['맹구', 1],
]);
return (
<>
<div className="test">
<ul>
<li>{나이[0][0]}: {나이[0][1]}</li>
<li>{나이[1][0]}: {나이[1][1]}</li>
<li>{나이[2][0]}: {나이[2][1]}</li>
<li>{나이[3][0]}: {나이[3][1]}</li>
{/* 일반 태그 map 사용 */}
{나이.map((item, index) => <li key={index}>{item[0]}: {item[1]}</li>)}
<Li key={0} a={0} b={0} c={1} 나이={나이}/>
<Li key={1} a={1} b={0} c={1} 나이={나이}/>
<Li key={2} a={2} b={0} c={1} 나이={나이}/>
<Li key={3} a={3} b={0} c={1} 나이={나이}/>
</ul>
</div>
</>
)
}
function Li({a,b,c,나이}){
return(
<>
<li>{나이[a][b]} : {나이[a][c]}</li>
</>
)
}
export default App;

👩🏻: key 값이 없으면 에러남!
❓ 왜냐고?
1. React 경고 메시지
- React는 각 요소에 고유한 key가 필요하다고 경고 메시지를 출력 -> console 창 보기 싫음!
2. 비효율적인 DOM 업데이트
- 예를 들어, 특정 요소만 바뀌었을 때 React가 key를 제대로 판단하지 못하면 리스트 전체를 다시 렌더링할 가능성이 높아짐
3. 오작동 가능성
- key가 잘못 설정되면 React가 변경된 데이터를 잘못 인식하여 원하지 않는 동작이 발생할 수 있음
📌 그럼 좋은 key 값을 설정하려면?
1. 고유성
- 리스트 내에서 유일
2. 안정성
- 리스트가 변경되더라도 key 값은 변경 되면 안됨!! ❌
예: 데이터베이스의 고유 ID를 사용
3. 인덱스 사용은 신중히
- 리스트가 고정된 순서로만 사용된다면 index를 key로 사용 가능 ⭕
- 하지만 리스트가 정렬되거나 항목이 추가/삭제되는 경우에는 인덱스 사용은 권장되지 않음 ❌
컴포넌트 + map 사용 응용!
<ul>
<Li a={0} b={0} c={1} 나이={나이}/>
<Li a={1} b={0} c={1} 나이={나이}/>
<Li a={2} b={0} c={1} 나이={나이}/>
<Li a={3} b={0} c={1} 나이={나이}/>
{/* 컴포넌트 map 사용 */}
{나이.map((item, index) => (
<Li key={index} a={index} b={0} c={1} 나이={나이} />
))}
</ul>
'개발 > 🟦 React' 카테고리의 다른 글
| [문법] 파라미터(props) 사용 (부모 -> 자식) 1 (1) | 2025.01.16 |
|---|---|
| [문법] .map() 에서 동작 따로 관리하기 (2) | 2025.01.15 |
| [문법] 컴포넌트, 삼항 연산자, Modal 창 제어하기 (0) | 2025.01.06 |
| [문법] 컴포넌트와 props (3) | 2025.01.04 |
| [함수] sort() 오름차순, 내림차순 정렬하기 (4) | 2025.01.04 |
