// UserList.js
import React from 'react';
function UserList() {
const users = [
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@example.com'
},
{
id: 3,
username: 'liz',
email: 'liz@example.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[1].email})</span>
</div>
</div>
);
}
export default UserList;
// UserList.js
function User({ user }) {
return (
<div>
<b>{user.username}</b> <span>({user.email})</span>
</div>
);
}
function UserList() {
const users = [
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@example.com'
},
{
id: 3,
username: 'liz',
email: 'liz@example.com'
}
];
return (
<div>
<User user={users[0]} />
<User user={users[1]} />
<User user={users[2]} />
</div>
);
}
// UserList.js
...
return (
<div>
{users.map(user => (
<User user={user} /> // error
<User user={user} key={user.id} /> // 고유 값 id를 key로 설정
))}
</div>
);
}
...
<div>
{users.map((user, index) => (
<User user={user} key={index} />
))}
</div>
...
const array = ['a', 'b', 'c', 'd'];
array.map(item => <div>{item}</div>); // 렌더링
위 배열의 b 와 c 사이에 z 삽입 시, 리렌더링을 하게 될 때 b와 c사이에 새 div 태그를 삽입을 하게 되는 것이 아니라, 기존의 c가 z로, d는 c로 바뀌고, 마지막에 d가 새로 삽입되는 방식
a 제거 시에는 기존의 a가 b로, b 는 z로, z는 c로, c는 d로 바뀌고, 맨 마지막에 있는 d가 제거되게 된다.
[
{
id: 0,
text: 'a'
},
{
id: 1,
text: 'b'
},
{
id: 2,
text: 'c'
},
{
id: 3,
text: 'd'
}
];
array.map(item => <div key={item.id}>{item.text}</div>);
// id를 key 값으로 사용