๐ฅ Warning: Each child in a list should have a unique "key" prop. ๐ฅ
์ต์ํ ์๋์ด๋ค ,,,!
๋ฆฌ์กํธ์์ map์ ์ฌ์ฉํด์ ์๋ฆฌ๋จผํธ๋ฅผ ํ๋์ฉ ๋ง๋ค์ด๋ผ ๋
ํค ๊ฐ์ ์ฃผ์ง ์์ผ๋ฉด ํญ์ ๋ณด๊ฒ ๋๋ ๋ฌธ๊ตฌ์ด๋ค.
๋ฆฌ์กํธ์์ key๋ ๋๋์ฒด ์ ์ค์ํ ๊ฒ์ผ๊น?
Key ( index โ )
๋ฆฌ์กํธ์์ key๋ ๊ฝค ์ค์ํ ๋ฏ ๋ณด์ธ๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํค๋ฅผ ์คฌ์ ๋์ ์ ์คฌ์ ๋์ ๋ฆฌ๋ ๋๋ง์๋ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
๋ฐฐ์ด์ด๋๊น key๋ฅผ ํธํ๊ฒ index๋ก ์ฃผ๋ฉด ์ ๋๋?
์ด์ฐจํผ ์๊ธฐ๋ค๋ผ๋ฆฌ ๋ค๋ฅด๋ฉด ์ ๋ํฌํ ๊ฒ ์๋๊ฐ๋ผ๊ณ ์๊ฐํ๋ค ใ ใ ใ
๊ฒฐ๋ก ์ ์๋๋ค! ๊ทธ๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ด
์นด๋๊ฐ ๋ค๋ฅธ ์์๋ก ์์ธ ๋ฐฐ์ด์ ํจ๊ฐ ์๋ค๊ณ ํ์ ๋,
์ด๊ฒ์ 1์ด๋ง๋ค ์นด๋๋ฅผ ์๋ฏ์ด ํจ ๋ฐฐ์ด์ ๋ฐ๊ฟ์ค๋ค๊ณ ๊ฐ์ ํ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
(์ด๋ ํค๋ฅผ ํ ๋ฒ์ id ๊ฐ์ผ๋ก, ๋ค๋ฅธ ํ ๋ฒ์ index ๊ฐ์ผ๋ก ์ค ์์ ์ด๋ค.)
const oneCard = [
[
{ id: "1", value: "spaede" },
{ id: "2", value: "diamond" },
{ id: "3", value: "heart" },
{ id: "4", value: "clobs" }
],
[
{ id: "4", value: "clobs" },
{ id: "1", value: "spaede" },
{ id: "2", value: "diamond" },
{ id: "3", value: "heart" }
],
[
{ id: "3", value: "heart" },
{ id: "1", value: "spaede" },
{ id: "2", value: "diamond" },
{ id: "4", value: "clobs" }
],
[
{ id: "2", value: "diamond" },
{ id: "1", value: "spaede" },
{ id: "3", value: "heart" },
{ id: "4", value: "clobs๏ธ" }
]
];
์ธ๋ฑ์ค๋ฅผ ํค ๊ฐ์ผ๋ก?
์ธ๋ฑ์ค๋ฅผ ํค ๊ฐ์ผ๋ก ์ฃผ๋ฉด ๋ ๋๋ง์ด ์ด๋ป๊ฒ ๋ ๊น?
์๋ ์ฝ๋๋ฅผ ์คํํ ๋ค tab ํค๋ก ํฌ์ปค์ค๋ฅผ ์ก์๋ณด๋ฉด
const App = () => {
//๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ฐฐ์ด๋ก setํ ๋ค
const [cards, setCards] = React.useState(oneCard[0]);
//1์ด๋ง๋ค ์นด๋๋ฅผ ์๋๋ค.
React.useEffect(() => {
const interval = setInterval(() => {
const random = Math.floor(Math.random() * 3);
setCards(oneCard[random]);
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
return (
<>
{cards.map((card, index) => (
<div key={index}>
<button>
{card.value}
</button>
</div>
))}
</>
);
ํฌ์ปค์ค๋ ์ด๋ํ์ง ์์ง๋ง ๋ฒํผ์ ์ ํ ์นด๋๋ช ๋ง ๋ณํ๋ค.
ํค๋ฅผ ์ ์ค ๊ฒ๊ณผ ๋ค๋ฅผ ๊ฒ ์๋ค.
์์ผ๊น? ์๊ฐ ๋ณด๋ฉด ์ธ๋ฑ์ค์ ์ํ๋ ๋ณํ์ง ์๋๋ค.
+)
๋ฆฌ์กํธ์์๋ ๋ฆฌ์คํธ ํญ๋ชฉ์ ๋ช ์์ ์ผ๋ก key๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก index๋ฅผ key๋ก ์ฌ์ฉ
ํ์ง๋ง ๋ด๊ฐ ์ํ๋ ๊ฑด ์์ธ ํจ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๊ฒ..!
๋ฆฌ์กํธ๋ ๋ฆฌ๋๋๋ง ๊ณผ์ ์์ ๋ณํ์ง ์์ ํค == ์ธ๋ฑ์ค๋ฅผ ๋ณด๊ณ
๋์ผํ ์ํ๋ผ๊ณ ํ๋จํ๊ณ ๋ณ๊ฒฝํ์ง ์์ ์ฑ ๋ฒํผ์ ์ด๋ฆ๋ง ์ ๋ฐ์ดํธํ๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ฒด๋ฅผ ์ฎ๊ธฐ๋ฏ์ด!
์ปดํฌ๋ํธ ์์ฒด์ ์์น๋ฅผ ๋ฐ๊พธ๋ฉฐ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์๋ unique key๋ฅผ ์ค์ผ ํ๋ค.
key์ id ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ํด๋น ์นด๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ํฌ์ปค์ค๊ฐ ์ ์ ์ง๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!
const App = () => {
//๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ฐฐ์ด๋ก setํ ๋ค
const [cards, setCards] = React.useState(oneCard[0]);
//1์ด๋ง๋ค ์นด๋๋ฅผ ์๋๋ค.
React.useEffect(() => {
const interval = setInterval(() => {
const random = Math.floor(Math.random() * 3);
setCards(oneCard[random]);
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
return (
<>
{cards.map((card) => (
<div key={card.id}>
<button>
{card.value}
</button>
</div>
))}
</>
);
๋ฆฌ์กํธ์์ key๋
๋ฆฌ์กํธ๊ฐ ์ด๋ค ํญ๋ชฉ์ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ญ์ ํ ๊ฒฝ์ฐ ์๋ณํ๋ ๊ฒ์ ๋์์ค๋ค!
key๋ ์๋ฆฌ๋จผํธ์ ์์ ์ ์ธ ๊ณ ์ ์ฑ์ ๋ถ์ฌํ๊ธฐ ์ํด ๋ฐฐ์ด ๋ด๋ถ์ ์๋ฆฌ๋จผํธ์ ์ง์ ํด์ผ ํ๋ค.
๊ณต์ ๋ฌธ์์์๋ ์ธ๋ฑ์ค๋ ์ต์ต์ต์ตํ์ ์๋จ์ผ๋ก ์ฌ์ฉํ๋ผ๊ณ ๋ช ์ํด๋์๋ค.
ํนํ๋ !!!!
ํญ๋ชฉ์ ์์๊ฐ ๋ฐ๋ ์ ์๋ ๊ฒฝ์ฐ์๋ key์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ,
์ฑ๋ฅ ์ ํ๋ ์ปดํฌ๋ํธ์ state์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค!!
โ ๏ธ ์๋ ๋ด์ฉ์ ๋ชจ๋ ๊ฐ์ธ์ ์ธ ์ฐธ๊ณ / ๊ธฐ๋ก์ ์ํ ์ฉ๋์
๋๋ค. ์ฐธ๊ณ ํด์ฃผ์๊ณ ํธ์ํ๊ฒ ๋ด์ฃผ์ธ์ :) โ ๏ธ
*** ํน์๋ผ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ์ง ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ! ***
'JS > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ : todo-list ๋ง๋ค๊ธฐ! (0) | 2021.09.14 |
---|---|
[React] #10 ๋ฆฌ์กํธ : ํจ์ ์ปดํฌ๋ํธ์ Hook ? (0) | 2021.09.11 |
[React] #9 ๋ฆฌ์กํธ Hooks : useState()์ ๋น๋๊ธฐ์ ์์ฑ (0) | 2021.09.05 |
[React] #8 ๋ฆฌ์กํธ๋ก input ํฌ์ปค์ค ์ฃผ๊ธฐ : React.useRef() (0) | 2021.09.02 |
[React] #7 ๋ฆฌ์กํธ์ ๋ฆฌ๋๋๋ง : Virtual DOM (0) | 2021.08.28 |