React์์ key prop์ ๋ฆฌ์คํธ๋ iterable ๊ฐ์ฒด ๋ ๋๋ง ์ ์ค์ํ ์ญํ ์ ํ์ง๋ง, ์ํ(state) ๊ด๋ฆฌ์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
key์ ์ญํ
- React์์ key๋ ๊ฐ ์ปดํฌ๋ํธ์ ๊ณ ์ ์ฑ์ ๋ณด์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์จ์ ์ผ๋ก ๊ฐ์งํ๊ณ ์ ๋ฐ์ดํธํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋ key๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๊ธฐ์กด์ ์ปดํฌ๋ํธ๊ฐ ์ ์ง๋๋ฉฐ, ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ ์๋ก์ด ๊ฒ์ผ๋ก ์ธ์๋ฉ๋๋ค.
key๊ฐ state์ ๋ฏธ์น๋ ์ํฅ
- key๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฆ, key ๊ฐ์ด ๋ฐ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ์ํ๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.
- ์ด๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ฉด์ ๊ฐ๋ณ์ ์ผ๋ก ์ํ๋ฅผ ์ ์งํ๊ณ ์ถ์ ๋ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค.
import { useState } from "react";
type Props = {
id: number;
};
const MyComponent = ({ id }: Props) => {
const [count, setCount] = useState(0);
return (
<div>
<p>์ปดํฌ๋ํธ ID: {id}</p>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>์ฆ๊ฐ</button>
</div>
);
};
const App = () => {
const [componentId, setComponentId] = useState(1);
return (
<div>
<button onClick={() => setComponentId(componentId + 1)}>
์ปดํฌ๋ํธ ๋ณ๊ฒฝ
</button>
<MyComponent key={componentId} id={componentId} />
</div>
);
};
์ ์ฝ๋์์ key={componentId}๋ฅผ ๋ณ๊ฒฝํ๋ฉด MyComponent์ ์ํ(count)๊ฐ ์ด๊ธฐํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
useState์ ์ด๊ธฐํ ๋ฐฉ์
React์ useState๋ ์ปดํฌ๋ํธ๊ฐ ์ต์ด ๋ ๋๋ง๋ ๋ ํ ๋ฒ๋ง ์ด๊ธฐํ๋ฉ๋๋ค.
const [count, setCount] = useState(0);
์ ์ฝ๋์์ count์ ์ด๊ธฐ๊ฐ 0์ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์ค์ ๋ฉ๋๋ค. ์ดํ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด๋ useState(0)์ 0์ด ๋ค์ ์ด๊ธฐํ๋์ง ์์ต๋๋ค.
๋ง์ฝ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ง์ดํธ๋๋ฉด useState๋ ๋ค์ ์ด๊ธฐํ๋ฉ๋๋ค. ์์ ์ค๋ช ํ key๋ฅผ ํ์ฉํ๋ฉด ์ด๋ฅผ ๊ฐ์ ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค.
์์ฝ
- key prop์ด ๋ณ๊ฒฝ๋๋ฉด React๋ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ์ฌ ์ํ๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.
- useState๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์ด๊ธฐํ๋ฉ๋๋ค.
- key๋ฅผ ํ์ฉํ๋ฉด ํน์ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๊ฐ์ ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค.
- references
๋ฆฌ์คํธ ๋ ๋๋ง – React
The library for web and native user interfaces
ko.react.dev
๋ฆฌ์คํธ์ Key – React
A JavaScript library for building user interfaces
ko.legacy.reactjs.org
'Front-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Next.js ์ด๊ธฐ ๋ ๋๋ง ์ ๋ค๊ตญ์ด ๋ฌธ๊ตฌ๊ฐ ๋น์ด ๋ณด์ด๋ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (1) | 2025.06.15 |
|---|---|
| useState์ ๋น๋๊ธฐ์ฑ (0) | 2025.04.13 |
| Timer Interval ์ง์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ (2) | 2025.02.02 |
| React Server Component๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ (0) | 2024.12.15 |
| ์น ํ์ค๊ณผ ์น ์ ๊ทผ์ฑ (0) | 2023.11.29 |