JavaScript가 끝나고 이제는 React를 배우게되었다...
JavaScript도 아직 잘 모르는데 React라니...!!!
filter()와 map()을 사용해서 배열에서 조건에 맞는 데이터를 화면에 렌더링하는 과제를 풀었다.
근데 몇 가지 실수를 해서 원하는 출력이 되지 않았다...
👩💻 내가 쓴 코드
import './App.css';
//문제: users 배열 중 거주지가 서울인 사람의 이름과 나이를 화면에 렌더링해주세요.
const users = [
{ id: 1, 이름: '홍길동', 나이: 25, 거주지: '서울' },
{ id: 2, 이름: '김철수', 나이: 30, 거주지: '부산' },
{ id: 3, 이름: '박영희', 나이: 22, 거주지: '서울' },
{ id: 4, 이름: '이민호', 나이: 27, 거주지: '대구' },
{ id: 5, 이름: '최수정', 나이: 29, 거주지: '부산' },
{ id: 6, 이름: '강호동', 나이: 35, 거주지: '대구' },
{ id: 7, 이름: '이수진', 나이: 32, 거주지: '인천' },
{ id: 8, 이름: '장동건', 나이: 28, 거주지: '서울' },
{ id: 9, 이름: '유재석', 나이: 40, 거주지: '부산' },
{ id: 10, 이름: '김범수', 나이: 37, 거주지: '인천' },
];
function App() {
// 요구사항1. filter() 매서드를 사용하여 users의 배열 중, 거주지가 '서울' 인 사람들만 seoulUsers 배열에 담아주세요.
const seoulUsers = users.filter((user) => users.거주지 === '서울');
// 요구사항2. map() 매서드를 사용해서 seoulUsers 배열에 있는 요소들을 화면에 표시해주세요.
// 단, 이름: 나이: 이렇게 구분하여 표시되어야합니다.
return (
<>
{seoulUsers.map()}
<div key={seoulUsers}>
이름: {users.이름}, 나이: {users.나이}
</div>
</>
);
}
export default App;
❌ 실수 1. filter에서 user.거주지 대신 users.거주지라고 썼음
const seoulUsers = users.filter((user) => users.거주지 === '서울');
처음에 위처럼 작성했는데, 아무리 봐도 문제가 없다고 생각했다.
하지만 출력 결과가 빈 배열이었고, 화면에도 아무것도 나오지 않았다.
알고 보니 users는 전체 배열이고, 거기엔 .거주지라는 속성이 있을 수가 없었다.
filter() 안에서는 배열의 각 요소를 의미하는 user를 받아와야 하니까, 이렇게 고쳐야 했다.
const seoulUsers = users.filter((user) => user.거주지 === '서울');
❌ 실수 2. map() 안에 아무것도 안 넣고, 엉뚱한 값을 출력하려고 했음
{seoulUsers.map()}
<div key={seoulUsers}>
이름: {users.이름}, 나이: {users.나이}
</div>
map()을 사용할 때 어떤 요소를 렌더링할지 안 써놨고, users.이름처럼 배열 전체에서 값을 꺼내려고 했다.
이것도 말이 안 되는 코드였다.
map()은 배열의 각 요소를 하나씩 받아와서 어떤 JSX를 그릴지 정해야 한다.
또, users가 아니라 반복 중인 각 user 객체에서 값을 꺼내야 했다.
그리고 key 값도 배열 전체가 아니라 user.id를 써야 React가 경고를 안 띄운다.
✅ 수정 후 올바른 코드
{seoulUsers.map((user) => (
<div key={user.id}>
이름: {user.이름}, 나이: {user.나이}
</div>
))}
이렇게 고치고 나니 서울에 거주하는 사람들의 이름과 나이가 잘 출력되었다.
React에서 .map()과 .filter()는 정말 자주 쓰이는데, 변수 하나하나 잘못 쓰면 원하는 대로 작동하지 않는다.
조금만 방심해도 이런 실수가 생길 수 있단 걸 다시 느꼈다.
📌 이번 오답을 통해 배운 점
- .filter() 안에서는 배열의 각 요소를 의미하는 변수를 써야 한다. (예: user.거주지)
- .map()을 쓸 땐 반복 중인 요소를 받아 JSX를 리턴해야 한다.
- key는 각 요소를 고유하게 식별할 수 있는 값으로 꼭 설정한다.
- 객체 접근 시 .이름처럼 잘못된 대상(users vs user)을 참조하면 오류가 난다.
'코딩이야기𖦹 > 오답노트' 카테고리의 다른 글
📝 [250321~0325/오답노트] 자바스크립트 4일 걸린 계산기 만들며 겪은 오답노트 (2) | 2025.03.27 |
---|---|
📝 [250320/오답노트] 사용자 정보 저장 & 필터링 과제 피드백 정리 (0) | 2025.03.22 |
📝 [250318/오답노트] 자바스크립트 객체 & 생성자 함수, 그리고 타이머 실수 정리 (1) | 2025.03.18 |
📝 [250317/오답노트] 자바스크립트 addEventListener(), parseInt(), classList.add('클래스명') 정리 (0) | 2025.03.17 |
📝 [250314/오답노트] 자바스크립트 querySelector(), appendChild(), for문, 그리고 if-else (0) | 2025.03.14 |