๐กIDEA
- ๊ทธ๋ฅ ์ฝ๋๋ฅผ ์์ฑ (๋ฐ๋ก ์ ๋ฆฌํ์ง ์๊ฒ ์, ์ฌ์ฌ์ฉํ ์ ์์ด์ ใ )
- ํํ์ผ์ ์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ ์ ์ธ
1๏ธโฃ ๋ฐฐ์ด์ด ๊ณ ์ ์ ์ผ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํ๋ํ๋ ์กฐํํด๊ฐ๋ฉด์ ๋ ๋๋งํ๋ ๋ฐฉ๋ฒ (์ ์ ์ธ ๋ฐฐ์ด)
import React from 'react'
function User({user}) {
return(
<div>
<span>{user.name}</span>
<span>{user.age}</span>
</div>
)
}
function UserList() {
// ๋ ๋๋ง์ ์ํ ๋ฐฐ์ด
const users = [
{id: 1, name: 'John', age:19},
{id: 2, name: 'Car', age:20},
{id: 3, name: 'lee', age:14},
];
return (
<div>
<User user={users[0]} />
<User user={users[1]} />
<User user={users[2]} />
</div>
)
}
export default UserList
2๏ธโฃ ๋์ ์ธ ๋ฐฐ์ด์ ๋ ๋๋ง
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ๋ด์ฅํจ์ map() ์ ์ฌ์ฉ
๐ก map() ํจ์?
- ๋ฐฐ์ด์์ ์๋ ๊ฐ ์์๋ฅผ ๋ณํํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋ค.
- ๋ฆฌ์กํธ์์ ๋์ ์ธ ๋ฐฐ์ด์ ๋ ๋๋งํด์ผ ํ ๋๋ ์ด ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋ฆฌ์กํธ ์จ๋ฆฌ๋จผํธ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด๋ก ๋ณํํด์ฃผ๋ฉด ๋๋ค!
import React from 'react'
function User({user}) {
return(
<div>
<span>{user.name}</span>
<span>{user.age}</span>
</div>
)
}
function UserList() {
const users = [
{id: 1, name: 'John', age:19},
{id: 2, name: 'Car', age:20},
{id: 3, name: 'lee', age:14},
];
return (
<div>
{/* map() ํจ์๋ฅผ ์ฌ์ฉ */}
{users.map(user => (
<User user={user} />
))}
</div>
)
}
export default UserList
๐ซ ์ด๋ ์ฃผ์ํด์ผํ ์ ์ด์๋ค, ๋ฆฌ์กํธ์์ ๋ฐฐ์ด์ ๋ ๋๋งํ ๋๋ key๋ผ๋ props๋ฅผ ์ค์ ํ๋ ๊ฒ!
- key ๊ฐ์ ์์๋ค๋ง๋ค ๊ฐ์ง๊ณ ์๋ ๊ณ ์ ๊ฐ์ผ๋ก ์ค์ ํด์ผํ๋ค.
- ๋ง์ฝ ๋ฐฐ์ด์ ๋ ๋๋ง ํ ๋, key ์ค์ ์ ํ์ง ์๊ฒ ๋๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก index ๊ฐ์ key๋ก ์ฌ์ฉํ๊ฒ ๋๊ณ , ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋จ๊ฒ ๋๋ค.
- ๊ฐ ๊ณ ์ ์์์ key๊ฐ ์์ด์ผ๋ง ๋ฐฐ์ด์ด ์ ๋ฐ์ดํธ ๋ ๋ ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ด ๋ ์ ์๋ค.
- ์ง๊ธ์ ๊ฒฝ์ฐ์๋ id๊ฐ ๊ณ ์ ๊ฐ์!
import React from 'react'
function User({user}) {
return(
<div>
<span>{user.name}</span>
<span>{user.age}</span>
</div>
)
}
function UserList() {
const users = [
{id: 1, name: 'John', age:19},
{id: 2, name: 'Car', age:20},
{id: 3, name: 'lee', age:14},
];
return (
<div>
{/* ๋ฐฐ์ด์ ๋ ๋๋งํ ๋, key๋ผ๋ props๋ฅผ ์ค์ ํด์ฃผ๊ธฐ!! */}
{users.map(user => (
<User user={user} key={user.id}/>
))}
</div>
)
}
export default UserList
- ๋ง์ฝ, ๋ฐฐ์ด์์ ์์๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ณ ์ ๊ฐ์ด ์ค์ ์ด ์๋์ด์๋ค๋ฉด map() ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ค์ ํ๋ ์ฝ๋ฐฑํจ์์ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ index๋ฅผ key๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
<div>
{users.map((user, index) => (
<User user={user} key={index} />
))}
</div>
โฐ Key์ ์กด์ฌ์ ๋ฌด์ ๋ฐ๋ฅธ ์ ๋ฐ์ดํธ ๋ฐฉ์
1๏ธโฃ key๊ฐ ์์ ๊ฒฝ์ฐ
- ๋นํจ์จ์ ์ธ ์ ๋ฐ์ดํธ
- ๋ฐฐ์ด๋ค ์ฌ์ด์ ์๋ก์ด ๊ฐ์ ์ฝ์ ํน์ ์ญ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ๋ชจ๋ ์ธ๋ฑ์ค์ ๊ฐ๋ค์ ๋ณ๋์ด ์ผ์ด๋๊ฒ ๋๋ค.
2๏ธโฃ key๊ฐ ์์ ๊ฒฝ์ฐ
- ํจ์จ์ ์ธ ์ ๋ฐ์ดํธ
- ๋ฐฐ์ด๋ค ์ฌ์ด์ ์๋ก์ด ๊ฐ์ ์ฝ์ ํน์ ์ญ์ ํ ๋, ์์ ๋์ง ใ ๋ณ๋ ๊ธฐ์กด์ ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ ์ํ๋ ๊ณณ์ ๋ด์ฉ์ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
- ๋๋ฌธ์, ๋ฐฐ์ด์ ๋ ๋๋ง ํ ๋์๋ ๊ณ ์ ํ key ๊ฐ์ด ์๋ ๊ฒ์ด ์ค์
- ๋ง์ฝ ๋ฐฐ์ด์์ ์ค๋ณต๋๋ key๊ฐ ์์ ๊ฒฝ์ฐ, ๋ ๋๋ง ์์ ์ค๋ฅ๋ฉ์์ง๊ฐ ์ฝ์์ ๋ํ๋๊ฒ ๋๋ฉฐ, ์ ๋ฐ์ดํธ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด ์ง์ง ์๊ฒ ๋๋ค.
Reference
'React > Velopert's React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Study #12 | ๋ฐฐ์ด์ ํญ๋ชฉ ์ถ๊ฐํ๊ธฐ (0) | 2021.10.07 |
---|---|
[React] Study #11 | useRef ๋ก ์ปดํฌ๋ํธ ์์ ๋ณ์๋ง๋ค๊ธฐ (0) | 2021.10.04 |
[React] Study #9 | useRef ๋ก ํน์ DOM ์ ํํ๊ธฐ (0) | 2021.10.02 |
[React] Study #8 | ์ฌ๋ฌ๊ฐ์ input ์ํ ๊ด๋ฆฌํ๊ธฐ (useState) (0) | 2021.10.02 |
[React] Study #7 | input ์ํ ๊ด๋ฆฌํ๊ธฐ (useState, onChange) (0) | 2021.10.02 |