์ด ๊ฐ์๋ React์์ ๋ฐฐ์ด(Array)๊ณผ ๊ฐ์ฒด(Object) ํ์ ์ state๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค. ํนํ ์ฐธ์กฐ ํ์ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ๋ถ๋ณ์ฑ(Immutability) ์์น์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ ๋
ํ']);
// ๋ฒํผ ํด๋ฆญ ์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ ๋ณ๊ฒฝ
<button onClick={() => {
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(['์ฌ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ ๋
ํ']);
}}>์์ ๋ฒํผ</button>
<button onClick={() => {
๊ธ์ ๋ชฉ[0] = '์ฌ์์ฝํธ ์ถ์ฒ';
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(๊ธ์ ๋ชฉ); // ์๋ํ์ง ์์!
}}>์์ ๋ฒํผ</button>
<button onClick={() => {
let copy = ๊ธ์ ๋ชฉ; // ์์ ๋ณต์ฌ (๊ฐ์ ์ฐธ์กฐ)
copy[0] = '์ฌ์์ฝํธ ์ถ์ฒ';
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy); // ์๋ํ์ง ์์!
}}>์์ ๋ฒํผ</button>
[๋ฐฉ๋ฒ 2], [๋ฐฉ๋ฒ 3] ๋ฌธ์ ์ :
let copy = ๊ธ์ ๋ชฉ์ ์ค์ ๋ก ๋ณต์ฌ๊ฐ ์๋๋ผ ๊ฐ์ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋์ copy[0]์ ๋ณ๊ฒฝํ๋ฉด ์๋ณธ ๊ธ์ ๋ชฉ ๋ฐฐ์ด๋ ํจ๊ป ๋ณ๊ฒฝ๋์ฃ . React๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง ์ด์ ๊ฐ๊ณผ ํ์ฌ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๋น๊ตํด์ ํ๋จํ๋๋ฐ, ์ฐธ์กฐ๊ฐ ๊ฐ์ผ๋ฉด ๋ณ๊ฒฝ๋์ง ์์๋ค๊ณ ์๊ฐํด์ ๋ฆฌ๋ ๋๋ง์ ํ์ง ์์ต๋๋ค.
<button onClick={() => {
let copy = [...๊ธ์ ๋ชฉ]; // ์๋ก์ด ์ฐธ์กฐ ์์ฑ
copy[0] = '์ฌ์์ฝํธ ์ถ์ฒ';
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy); // ์ ๋๋ก ์๋ํจ!
}}>์์ ๋ฒํผ</button>
let data1 = [1, 2, 3];
let data2 = data1; // ์ฐธ์กฐ๋ง ๋ณต์ฌ๋จ
data2[0] = 1000; // data1๋ ํจ๊ป ๋ณ๊ฒฝ๋จ
console.log(data1); // [1000, 2, 3]
console.log(data2 === data1); // true (๊ฐ์ ์ฐธ์กฐ)
// ๋ฐฐ์ด์ ๊ฒฝ์ฐ
let copy = [...๊ธฐ์กดstate];
// ๊ฐ์ฒด์ ๊ฒฝ์ฐ
let copy = {...๊ธฐ์กดstate};
===)...) ์ฌ์ฉํ์ฌ ๋ณต์ฌ<button onClick={() => {
let copy = [...๊ธ์ ๋ชฉ];
copy.sort(); // ์ํ๋ฒณ/๊ฐ๋๋ค์ ์ ๋ ฌ
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
}}>๊ฐ๋๋ค์ ์ ๋ ฌ</button>
Claude.ai ์์ ์ ์ํ ๊ฐ์์์ ๋ณด์ถฉํ๋ฉด ์ข์ ๋ด์ฉ
์ค์ฒฉ๋ ๊ฐ์ฒด/๋ฐฐ์ด ์ฒ๋ฆฌ ๋๋ฝ:
๊ฐ์์์๋ ๋จ์ผ ๋ ๋ฒจ์ ๋ฐฐ์ด/๊ฐ์ฒด๋ง ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ค์ฒฉ๋ ๊ตฌ์กฐ(๊ฐ์ฒด ์์ ๊ฐ์ฒด, ๋ฐฐ์ด ์์ ๊ฐ์ฒด ๋ฑ)๋ฅผ ๋ค๋ฃฐ ๋๋ ์คํ๋ ๋ ์ฐ์ฐ์๋ง์ผ๋ก๋ ๊น์ ๋ณต์ฌ(deep copy)๊ฐ ๋์ง ์๋๋ค๋ ์ ์ ์ถ๊ฐ๋ก ์ค๋ช
ํ ํ์๊ฐ ์์ต๋๋ค.
// ์ค์ฒฉ ๊ฐ์ฒด์ ๊ฒฝ์ฐ
let copy = {
...๊ธฐ์กดstate,
nested: { ...๊ธฐ์กดstate.nested } // ์ค์ฒฉ ๊ฐ์ฒด๋ ๋ณ๋ ๋ณต์ฌ ํ์
};
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ ๋๋ฝ:
ํฐ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ๋ณต์ฌํ๋ ๊ฒ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ํฐ ๋ฐ์ดํฐ์
์ ๋ค๋ฃฐ ๋๋ useCallback, useMemo, ๋๋ Immer ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค๋ ์ ์ ์ธ๊ธํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
sort ๋ฉ์๋ ์ฃผ์์ฌํญ:
์์ฉ ๋ฌธ์ ์์ ์ธ๊ธ๋ sort() ๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ์ง์ ๋ณ๊ฒฝํ๋ค๋ ์ ์ ๊ฐ์กฐํ ํ์๊ฐ ์์ต๋๋ค. ๋ํ ๊ธฐ๋ณธ ์ ๋ ฌ์ ๋ฌธ์์ด ๊ธฐ์ค์ด๋ฏ๋ก ์ซ์ ์ ๋ ฌ ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋ถ๋ณ์ฑ์ ์ค์์ฑ์ ๋ํ ์ค๋ช
๋ถ์กฑ:
๊ฐ์์์๋ "์๋ณธ์ด ๋์ค์ ํ์ํ ์ ์์ด์" ๋ถ๋ณ์ฑ์ ์ ์งํ๋ค๊ณ ์ค๋ช
ํ์ง๋ง, React์ ๋ ๋๋ง ์ต์ ํ์ ๊ด๋ จ๋ ๋ ์ค์ํ ์ด์ ๊ฐ ์์ต๋๋ค. ์ํ ๋น๊ต๋ฅผ ํตํ ๋ ๋๋ง ์ต์ ํ์ ์์ธก ๊ฐ๋ฅํ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ถ๋ณ์ฑ์ด ํ์ํ๋ค๋ ์ ์ ๊ฐ์กฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.