React
React - 배열 렌더링
Starters
2020. 9. 9. 20:10
이렇게 나오게 할 때
비효율적인 방법
import React from 'react';
function UserList(){
const users = [
{
id: 1,
username: 'starters',
email: 'public.starters@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@gmail.com'
},
{
id: 3,
username: 'jajajojo',
email: 'jajajojo@gmail.com'
}
];
return (
<div>
<div>
<b>{users[0].username}</b><span>({users[0].email})</span>
</div>
<div>
<b>{users[1].username}</b><span>({users[1].email})</span>
</div>
<div>
<b>{users[2].username}</b><span>({users[2].email})</span>
</div>
</div>
)
}
export default UserList;
- 같은 코드 반복됨
효율적인 코드
※ 하나의 컴포넌트 안에 다른 컴포넌트 만들어도 됨
import React from 'react';
function User({ user }){
return (
<div>
<b>{user.username}</b><span>({user.email})</span>
</div>
);
}
function UserList(){
const users = [
{
id: 1,
username: 'starters',
email: 'public.starters@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@gmail.com'
},
{
id: 3,
username: 'jajajojo',
email: 'jajajojo@gmail.com'
}
];
return (
<div>
<User user={users[0]} />
<User user={users[1]} />
<User user={users[2]} />
</div>
)
}
export default UserList;
User라는 컴포넌트 만들고 거기에 props로 users 배열에 대한 데이터 처리
내용을 바꾸게 될 때(map 사용)
JSX 부분 수정
return (
<div>
{
users.map(
user => (<User user={user} />)
)
}
</div>
)
-> 똑같이 화면에 결과 나옴, But) 개발자 도구에 에러 떠있음
=> 고유값을 찾아 key로 설정해 주어야 최적화가 잘 이루어진다.
여기서는 id가 고유값
return (
<div>
{
users.map(
user => (<User user={user} key={user.id} />)
)
}
</div>
)
만약 고유값이 없는 경우라면, map에서 사용하는 콜백함수의 두번째 파라미터인 index를 사용(어쩔 수 없는 경우에만))
return (
<div>
{
users.map(
(user, index) => (<User user={user} key={index} />)
)
}
</div>
)
- 이렇게 index를 key값으로 넣으면, 경고만 없어질 뿐 성능적으로 나아진 것은 아님
※ key의 역할
Ex)
새로운 값 z 를 넣으면, c 가 z 가 되고, d 가 c 가 되고, 새로운 d가 생긴다.
- 기존의 값을 남기고 z 만 들어와야 함
-> 각 값이 자신의 위치만 알고, 정확히 렌더링할 곳을 모르기 때문
=> 키를 설정하면 이게 가능하게 된다.
Javascript 배열 내장함수(map)
배열의 원소 값들 각각 제곱하여 새로운 배열 만들 때, map() 함수 사용하면 더욱 간편하게 할 수 있다. 더 간략하게 객체를 가진 배열에 대해서 사용할 때
startersdev.tistory.com