๋ฆฌ์กํธ์์ key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ ๋๋ โ์ง์งโ ์ด์
๋ฆฌ์กํธ์์ key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ ๋๋ โ์ง์งโ ์ด์ ๊ด๋ จ
๋ฆฌ์กํธ(React)๋ก ๊ฐ๋ฐํ ๋, ๋ฐฐ์ด ํํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์์ผ ๋ฆฌ์คํธ์ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ํํ ์ผ์ ๋๋ค. ์ด ๊ฒฝ์ฐ API ์์ฒญ์ผ๋ก ๋ฆฌ์คํธ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ map ๋ฑ ๋ฐ๋ณต๋ฌธ ํจ์๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ๋ก ๋ฐํํ๊ณ ๋ ํ๋๋ฐ์. ๋ง์ฝ eslint๋ฅผ ์ค์ ํด ๋์๋ค๋ฉด, ์ด ๊ณผ์ ์์ ์๋ ๊ฒฝ๊ณ ๋ฅผ ๋ง๋ฅ๋จ๋ฆด ์ ์์ต๋๋ค.
โMissing โkeyโ prop for element in iteratorโ, ๋ฐ๋ณต์ ์ธ ์์ ์์ ์๋ฆฌ๋จผํธ์ key ํ๋กํผํฐ๋ฅผ ์ ๋ฌํ์ง ์์๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ์์ํ ์ง ์ผ๋ง ์ ๋ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ผ๋ฉด, ์ด๋ ๊ฐ์ฅ ๋น์ทํด ๋ณด์ด๋ ๋ฐฐ์ด index ๊ฐ์ key์ ๋ถ์ฌํ ์๋ ์๊ฒ ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ผ ๋ ๋ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ ๋ํ๋ ๊ฒ๋๋ค.
์ด๋ฒ ๊ฒฝ๊ณ ๋ โDo not use Array index in keysโ, ๋ฐฐ์ด์ index ๊ฐ์ key์ ๋ฃ์ง ๋ง๋ผ๋ ๋ด์ฉ์ ๋๋ค. ์ ์ด๋ฐ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋จ๋ ๊ฑธ๊น์? key์ index ๊ฐ์ ๋ถ์ฌํ๋ฉด ๋ฌด์จ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฑธ๊น์?
key์ index๋ฅผ ๋ถ์ฌํ๋ฉด ์ ๋๋ ์ด์
key์ index ๊ฐ์ ๋ถ์ฌํ๋ฉด ์ ๋๋ ์ด์ ๋ ๊ฒ์์ผ๋ก ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ค์๊ฐ ์ด๋ฅผ ๋ฆฌ์กํธ์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ผ๊ณ ์ค๋ช ํฉ๋๋ค. key์ index ๊ฐ์ ๋ถ์ฌํ๋ฉด ๋ฐฐ์ด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ(์ฝ์ , ์ญ์ , ์ฌ์ ๋ ฌ)๋์ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค๋ ๊ฒ์ด์ฃ .
์์์ ๋ณด์๋ eslint ๊ฒฝ๊ณ ์ด์ธ, ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์๋ key์ index ๊ฐ์ ๋ฃ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ๊ทธ๋งํผ ์ค์ํ ๋ถ๋ถ์ผ๋ก ๋ณด์ ๋๋ค. ๋ฌธ์์์ ์ธ๊ธํ ๋ด์ฉ์ ๊ฐ๋จํ ์ ๋ฆฌํด ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- ํญ๋ชฉ์ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ , ์ฌ์ ๋ ฌ ์ ๋ ๋๋ง ์์๊ฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- index ๊ฐ ์ด์ธ์ ์ฆ์์์ ๊ฐ์ ์์ฑํ๋ ๊ฒฝ์ฐ๋ ๋น์ทํฉ๋๋ค. (์.
key={๋๋ค ๊ฐ ๋ฐํ ํจ์}
) - key๋ ์ค์ ๋ก ์ปดํฌ๋ํธ์ ์ ๋ฌ๋์ง ์๊ณ ๋ฆฌ์กํธ์์๋ง ์ฌ์ฉํฉ๋๋ค.
์ด์ ๋ฅผ ์์์ผ๋ ์ด์ ์์ผ๋ก๋ key์ index ๊ฐ์ ๋ฃ์ง ์์ผ๋ฉด ๋๊ฒ ๋ค์! ๊ถ๊ธ์ฆ์ ๋ชจ๋ ํด์ํ์ต๋๋ค.
๋์ธ๊ฐ์?
์ ๋ง ๋ชจ๋ ๊ถ๊ธ์ฆ์ด ๋ค ํ๋ ธ๋์?
๋ค์ ํ๋ฒ ๋ด์ฉ์ ๋์๊ฒจ ๋ณด๊ฒ ์ต๋๋ค. key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค๊ณ ํฉ๋๋ค. ์ฆ์์์ ๊ฐ์ ์์ฑํด ๋ถ์ฌํ๋ ๊ฒ ์ญ์ ์ ๋๋ค๊ณ ํ๋ค์. ๋ฐ๋ผ์ ๊ณ ์ ํ ๊ฐ์ ๋ฏธ๋ฆฌ ์์ฑํด ๋ถ์ฌํ๊ฑฐ๋, ๋ฐ์ดํฐ ์์ฒด์ ๊ณ ์ ํ ๊ฐ(id ๊ฐ ๋ฑ)์ key์ ๋ฃ์ผ๋ฉด ๋๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ๊น์ง ์์๋ณด์ ์ด๋ฐ ๊ถ๊ธ์ฆ์ด ์๊ฒผ์ต๋๋ค. index๊ฐ ์ ๋๋ ๊ฑด ๊ทธ๋ ๋ค ํ๋๋ผ๋, ์ฆ์์์ ๊ฐ์ ์์ฑํ๋ ๊ฒ์ ์ ์ ๋๋ ๊ฑธ๊น์? ์ด ๋ ๋ฐฉ๋ฒ์ ์ด๋ค ๊ณตํต์ ์ด ์์ด ๋ฌธ์ ๋ฅผ ๋ฐ์์ํค๋ ๊ฑธ๊น์? ์ ์ด์ key ํ๋กํผํฐ์ ์ญํ ์ ๋ฌด์์ผ๊น์?
๋ฐ๋ผ์ ์ด๋ฒ ๊ธ์์๋ ๋จ์ํ ํด๊ฒฐ๋ฒ๋ง ์์ ๋ณด๊ณ ๋๋ด๋ ๊ฒ์ด ์๋, ์ด๋ค ๋ฆฌ์กํธ ๋์ ์๋ฆฌ์ ๋ฐ๋ผ, ๋ฌด์จ ์ด์ ๋ก key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ ๋๋์ง, ์ด๋ฅผ ๋ ์์ธํ ์์๋ณด๊ณ ์ ํฉ๋๋ค.
๋ฆฌ์กํธ๋ ์ด๋ป๊ฒ ๋์ํ ๊น์?
์ด ์ฃผ์ ์ ๋ํด ์ดํด๋ณด๋ ค๋ฉด ์ฐ์ ๋ฆฌ์กํธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ถํฐ ์์์ผ ํฉ๋๋ค. ๋ฆฌ์กํธ๋ ์ฐ๋ฆฌ์ ์๊ฐ๋ณด๋ค ํจ์ฌ ๋ณต์กํ๊ณ ๋ฐฉ๋ํฉ๋๋ค. ์ด๋ฅผ ์ ๋ถ ๋ค๋ฃฐ ์๋ ์์ผ๋ ์ด๋ฒ ์ฃผ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํ ๋ด์ฉ๋ง ์ง๊ณ ๋์ด๊ฐ ๋ณด๊ฒ ์ต๋๋ค.
1. ๊ฐ์ ๋(Virtual DOM)
๋ฆฌ์กํธ๋ ๋ ๋๋งํ ๋ ๋ฉ๋ชจ๋ฆฌ์์ Virtual DOM(์ดํ: ๊ฐ์ ๋)์ ํ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋ ๋ฐ๋ก ์ค์ ๋์ ์กฐ์ํ๋ ๊ฒ์ด ์๋, ๊ฐ์ ๋์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ํ์ธํ๋ ์์ ์ ๊ฑฐ์น๋ ๊ฑฐ์ฃ .
์ค์ ๋์ ๋ฐ๋ก ์กฐ์ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ผ๊น์? ์ฑ๋ฅ ์ต์ ํ ๋๋ฌธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋์ ์กฐ์ํ๋ ๊ฒ์ ํฐ ๋น์ฉ์ ์ผ์ผํต๋๋ค. ๋์ด ๋ณ๊ฒฝ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ฆฌํ๋ก์ฐ(Reflow) ๋ฐ ๋ฆฌํ์ธํธ(Repaint)๋ฅผ ํฌํจํ ์ผ๋ จ์ ๊ณผ์ ์ ์งํํ๋๋ฐ์. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ ์ฒด ๋์ ๋ํด ์ด ๊ณผ์ ์ ๊ฑฐ์น๋ ค๋ฉด ํฐ ๋น์ฉ์ด ๋ค ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ ๋์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ํ์ธํ๊ณ , ์ค์ ๋ณ๊ฒฝ์ด ํ์ํ ๋ถ๋ถ๋ง ์ด๋ฅผ ์งํํ๋ฉฐ ๋ถํ์ํ ๋น์ฉ์ด ๋ค์ด๊ฐ์ง ์๋๋ก ํ ๊ฒ์ ๋๋ค. ๋ฐฉ๊ธ ์ค๋ช ํ ๊ณผ์ ์ ๋ฆฌ์กํธ์์๋ ์ฌ์กฐ์ (Reconciliation)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
2. ์ฌ์กฐ์ (Reconciliation)
์์ ๋งํ ์ฌ์กฐ์ ๊ณผ์ ์ ์์ ์ฝ๋๋ก ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ์๋๋ ๊ฐ๋จํ ์ซ์ ์นด์ดํธ ์ฝ๋์ ๋๋ค.
์ฒ์ ๋ฆฌ์กํธ๊ฐ ๊ตฌ๋๋ ๋๋ ์ค์ ๋์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ ๋๋ค. ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์ด๋ ๊ฐ์ ๋์ current์ workInProgress๋ผ๋ ์ด๋ฆ์ ๋๋ธ ๋ฒํผ๋ง(Double Buffering) ํํ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ๋จํ ๋งํ๋ฉด current๋ ํ์ฌ๊น์ง์ ๊ฐ์ ๋, workInProgress๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋, ์ด๋ฅผ ๋ฐ์ํ ๊ฐ์ ๋์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ง์ฝ ์์ ์์ ์์ 1 ๋ํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด, ๊ฐ์ ๋์ 1์ ๋ํ๊ธฐ ์ ์ current ๊ฐ์ ๋ ๊ฐ์ฒด์ ๋ํ ํ์ workInProgress ๊ฐ์ ๋ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
workInProgress์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋๋ฉด, current์ workInProgress์ ๋น๊ตํ์ฌ ์ค์ ๋์ ๋ฐ์ํ ๋ฆฌ์คํธ์ธ ์ดํํธ ๋ฆฌ์คํธ(Effect List)๋ฅผ ์์งํ ์ ์์ต๋๋ค. ๊ณง ์ด ๋ฆฌ์คํธ์ ์์๋ง ์ค์ ๋์ ๋ฐ์ํด ์ฐ๋ฆฌ ํ๋ฉด์ ๋ณํ๊ฐ ๋ํ๋ฉ๋๋ค. current๋ฅผ ์ฐธ์กฐํ๋ ํธ๋ฆฌ๋ workInProgress๋ก ๋ฐ๋๋๋ค.
์ด๋๋ ๊ฐ์ ๋์ ํ์ฉํด ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํ์ธํ์ฌ ๋ ๋๋ง์ ์งํํ๊ธฐ ๋๋ฌธ์, ๋ง์ฝ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ์๋๋ผ๋ ์ด๋ ๋ค์ ๋ ๋๋งํ์ง ์์ต๋๋ค.
์ค๊ฐ ์ ๋ฆฌ
์ง๊ธ๊น์ง ๋ด์ฉ์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- ๋ฆฌ์กํธ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ ๋์ ์ฌ์ฉํ์ฌ ๋ ๋๋ง์ ์งํํฉ๋๋ค.
- ํ์ฌ ๋ฒ์ ๊ณผ ๋ฐ๋ ๋ฒ์ ์ ๊ฐ์ ๋์ ๋น๊ตํ์ฌ ์ด๋ค ๊ฒ์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ์(์ฌ์กฐ์ [1])์ ๋๋ค.
- ๋ณ๊ฒฝ๋ ๊ณณ์ ์ ์ธํ ๋ถ๋ถ์ ๋ค์ ๋ ๋๋งํ์ง ์์ผ๋ฉฐ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
key๋ ์ด๋ค ์ญํ ์ ํ ๊น์?
1. ๊ฐ์ ๋์ key prop
์ด์ ์ฒ์ ์๋ฌธ์ ๊ฐ์ก๋ key์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ฆฌ์กํธ๋ ๊ฐ์ ๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์์ฑํ๋ค๊ณ ํ์ต๋๋ค. ๋ฆฌ์กํธ 16 ์ด์ ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก Fiber Node๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ด ๊ฐ์ฒด๋ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค. ํธ์์ ์ฃผ์ ์ ๊ด๋ จ๋ ์ ๋ณด๋ง ์ ๋ฆฌํ์ต๋๋ค.
2. ์ฌ์กฐ์ ๊ณผ์ ์์ key์ ์ญํ
๊ฐ์ ๋ ๊ฐ์ฒด๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์์์ ๋ณธ FiberNode๊ฐ ํด๋น ํธ๋ฆฌ์ ๊ฐ๋ณ ๋ ธ๋์ ๋๋ค. ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ ๊ฐ ํธ๋ฆฌ๋ฅผ ๋น๊ตํ ๋, ์ต์ฒจ๋จ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋ผ๋ n๊ฐ์ ์๋ฆฌ๋จผํธ์ ๋ํด ์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค๊ณ ํฉ๋๋ค. 1000๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ 10์ต ๋ฒ์ ๋น๊ต ์ฐ์ฐ์ ์งํํด์ผ ํ๋ค๋ ๋ป์ด์ฃ . ์ด๋ ๊ต์ฅํ ๋น์ผ ์ฐ์ฐ์ ๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ํด๊ฒฐ๋ฒ์ด ํ์ํ๊ณ , ๋ฆฌ์กํธ๋ ๋ ๊ฐ์ง ๊ฐ์ ์ ๋์ ํฉ๋๋ค.
- ํ์ ์ด ๋ค๋ฅธ ๋ ์๋ฆฌ๋จผํธ๋ ์๋ก ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ธ๋ค.
- ๊ฐ๋ฐ์๊ฐ key prop์ ์ ๋ฌํด ์ด๋ค ์์ ์๋ฆฌ๋จผํธ๊ฐ ๋ณ๊ฒฝ๋์ง ๋ง์์ผ ํ ์ง ํ์ํด ์ค๋ค.
1๋ฒ ๊ฐ์ ์์ ๋งํ๋ ํ์
์ ์๋ฆฌ๋จผํธ์ ํ์
์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผํ
๋ฉด <div>
๊ฐ <span>
์ผ๋ก ๋ฐ๋์๊ฑฐ๋, <Calculator>
๊ฐ <ToDoList>
๋ก ๋ฌ๋ผ์ง ๊ฒฝ์ฐ ํด๋น ํธ๋ฆฌ ์ ์ฒด๋ฅผ ๋น๊ตํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ง์ฝ ํ์
์ด ๋ฐ๋์ง ์๋๋ค๋ฉด ๋ณ๊ฒฝ๋ ์์ฑ(property)๋ง ๊ฐฑ์ ํฉ๋๋ค.
๋ค์ 2๋ฒ ๊ฐ์ ์์๋ key์ ์ญํ ์ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ key prop์ ์ ๋ฌํ์ฌ ์์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ก ๋ง๋ ๋ค๋ ๊ฒ์ธ๋ฐ์. ๋ค๋ฅด๊ฒ ๋งํ๋ฉด, key prop์ด ๋ฐ๋๋ฉด ์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋๋ผ๋ ์ด๋ฅผ ๋ณ๊ฒฝ์ผ๋ก ๊ฐ์ฃผํ๊ณ ๋ฆฌ๋ ๋๋ง์ ์งํํ๋ค๋ ๋ง์ ๋๋ค. ์์๋ฅผ ๋ณด๋ฉฐ ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
์์ ๊ฐ์ ๊ตฌ์กฐ์ ๋ฆฌ์คํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค. ๋ง์ฝ ์ด ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ <li>ํ๊ธธ๋
์ ์ถ๊ฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋คํํ๋ <li>ํฉ์ฃผํ
๊ณผ <li>himprover
๋ ๋ฐ๋์ง ์๊ณ , <li>ํ๊ธธ๋
๋ง ์ถ๊ฐ๋ ๊ฒ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฅ ์๋จ์ <li>ํ๊ธธ๋
์ด ์๊ธฐ๋ฉด ์ด๋จ๊น์? ์ค์ ๋ก <li>ํฉ์ฃผํ
๊ณผ <li>himprover
๋ ๊ฐ์ด ๋ฐ๋์ง ์์์ง๋ง, ํด๋น ์ปดํฌ๋ํธ ๋ชจ๋๋ฅผ ๋ค์ ์ฐ์ฐํด์ผ ํฉ๋๋ค. ์ด๋ฏธ ์ฐ์ฐํ ๊ฐ์ ์ด๋๋ง ํ๋ฉด ๋๋๋ฐ๋ ๋ง์ด์ฃ .
๋ฆฌ์กํธ๋ ์ด๋ฐ ์ํฉ์ ๊ฐ๋ฐ์๊ฐ ๋ฐฉ์งํด ์ฃผ๊ธฐ ๋ฐ๋์ต๋๋ค. key๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ง์ด์ฃ . ๊ทธ๋์ 2๋ฒ ๊ฐ์ ์ ๋ฐ๋ผ key ๊ฐ์ด ๋ณํ์ง ์๋๋ค๋ฉด ์ฐ์ฐ์ ๋ค์ ์งํํ์ง ์๊ณ , ์ด๋ฏธ ์๋ ๊ฐ์ ์ฌํ์ฉํ๋๋ก ํ์ต๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ถํ์ํ ์ฐ์ฐ์ ๋ฐฉ์งํ๋ฉฐ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋์ด๋ธ ๊ฒ์ด์ฃ . ์์์์๋ ๊ฐ๋จํ <li>
์์ง๋ง, ์ค์ ๋ก ๋ง์ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์ปดํฌ๋ํธ๋ผ๋ฉด ์ด ๋ฐฉ๋ฒ์ด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
index๋ฅผ ๋ฃ๊ฑฐ๋ ์ฆ์์์ ๊ฐ์ ์์ฑํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋๋์ด key๊ฐ ์ ํ์ํ๊ณ , ์ด๋ค ์ญํ ์ ํ๋์ง ์๊ฒ ๋์์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ index๋ฅผ ๋ฃ๊ฑฐ๋ ์ฆ์์์ ๊ฐ์ ์์ฑํ์ ๋, ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธธ์ง ์ดํดํ ์ค๋น๋ฅผ ๋ง์ณค์ต๋๋ค.
nbsp;**1. key์ ๋ฐฐ์ด index๋ฅผ ์ ๋ฌํ์ ๋
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด์์ index ๊ฐ์ ๋ง ๊ทธ๋๋ก ๊ฐ ์์์ ์์ ๋ฒํธ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ ๋์ด ์๋ ์ค๊ฐ์ด๋ ์ฒ์์ ๊ฐ์ ๋ํ๊ฑฐ๋ ์ญ์ ํ๋ฉด, ๋ชจ๋ index ๊ฐ์ด ๋ฌ๋ผ์ง๋๋ค. ์ด๋ ๊ณง index๊ฐ ๋ฐ๋ ๋ฆฌ์คํธ๋ก ๋ค์ ์ฐ์ฐ์ด ์ด๋ค์ ธ์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
2. key์ ์ฆ์์์ ์์ฑํ ๊ฐ์ ์ ๋ฌํ์ ๋
์ฆ์์์ ์์ฑํ ๋๋ค ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ์ index๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋์ฑ ๋นํจ์จ์ ์ ๋๋ค. ์ฌ์ค์ ๋งค๋ฒ ๋ชจ๋ ์ฐ์ฐ์ ๋ค์ ํด์ผ ํ๋๊น์. ๋ฐ๋ผ์ key ๊ฐ์ผ๋ก ์ฆ์์์ ์์ฑํ ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ์ ์ง์ํด์ผ ํฉ๋๋ค.
์ต์ข ์ ๋ฆฌ
์ฌ๊ธฐ๊น์ง ๊ฐ์ด ์ค๋๋ผ ๊ณ ์ํ์ จ์ต๋๋ค. ์ง๊ธ๊น์ง ์์๋ณธ ๋ด์ฉ์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- ๋ฆฌ์กํธ๋ key prop์ผ๋ก ํด๋น ๋ฆฌ์คํธ ์์ดํ ์ ๋ค์ ์ฐ์ฐํ ์ง ๋ง์ง ๊ฒฐ์ ํฉ๋๋ค.
- key prop์ index ๊ฐ์ ๋ฃ์ ๊ฒฝ์ฐ, ๋ฐฐ์ด ์์๊ฐ ๋ฐ๋ ๋๋ง๋ค ๋ค์ ์ฐ์ฐํ๋ฉฐ ๋ถํ์ํ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
- key prop์ ์ฆ์์์ ์์ฑํ ๋๋ค ๊ฐ์ ๋ฃ์ ๊ฒฝ์ฐ, ๋งค๋ฒ key prop์ด ๋ฌ๋ผ์ง๋ฉฐ ์ฐ์ฐ๋ ๋ค์ ์ด๋ค์ง๋๋ค.
- ๋ฐ๋ผ์ key prop์๋ ํด๋น ์์์ ๊ณ ์ ๊ฐ(์: ํ์ uuid ๋ฑ)์ ์ ๋ฌํด ๋ถํ์ํ ์ฐ์ฐ์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
์ฌ์ค ๋ฆฌ์กํธ๋ ๊ฐ๋ฐ์๊ฐ key prop์ ์ ๋ฌํ์ง ์์ผ๋ฉด, ์๋์ผ๋ก index ๊ฐ์ ๋ถ์ฌํฉ๋๋ค. ๋ฐ๋ผ์ key prop์ ์๋ฌด ๊ฐ์ ์ ๋ฌํ์ง ์์ผ๋ฉด index ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
๋ํ, ๊ทธ๋ ๋ค๊ณ ๋ฌด์กฐ๊ฑด index ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ ๊ฒ์ ์๋๋๋ค. ๋ฐฐ์ด์ ์์๊ฐ ์ถ๊ฐ/์ญ์ ๋๊ฑฐ๋ ์์๊ฐ ๋ฌ๋ผ์ง์ง ์๋ ๊ณ ์ ๋ ๋ฐ์ดํฐ๋ผ๋ฉด index ๊ฐ์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ์์์ ์์๊ฐ ๋ณํ์ง ์๋๋ค๋ ๊ฒ์ index ๊ฐ์ด ๊ณ ์ ๋๋ค๋ ์๋ฏธ๋ฅผ ์ง๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ง์น๋ฉฐ
๋ฆฌ์กํธ์์ key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ ๋๋ ์ด์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ด๋ ๊ฒ ๋ง์ ์ ๋ณด๋ฅผ ๊ณต๋ถํด์ผ ํ์ต๋๋ค. ๋ฌผ๋ก ๋จ์ํ โkey์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ต์ ํ๊ฐ ์ ๋๋คโ๋ก ๊ฒฐ๋ก ๋ด๋ ธ๋ค๋ฉด ์ด์ฒ๋ผ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ ์์์ ๊ฒ๋๋ค. ๊ทธ๋ฌ๋ โ์ต์ ํ๊ฐ ์ ๋๋คโ๋ผ๋ ์ฌ์ค๋ง ์๋ ์ฌ๋๊ณผ โ๋ฆฌ์กํธ์ ๋์ ์๋ฆฌ์ key ๊ฐ์ ์ญํ ์ ๊ธฐ์ธํ์ฌ, key์ index๋ฅผ ๋ฃ์ผ๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋คโ๋ผ๋ ์ฌ์ค์ ์ดํดํ๋ ์ฌ๋์ ํ์คํ ๋ค๋ฅด๊ฒ ์ฃ .
์ฃผ๋์ด ๊ฐ๋ฐ์์ผ์๋ก ์ด๋ค ๋ฌธ์ ์ ๋ด์ฐฉํ์ ๋, ์กฐ๊ธํ๊ฒ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์๋ง ๊ธ๊ธํ ๊ฒฝํฅ์ ๊ฐ์ง๊ณ ๋ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ ๋ฌธ์ ๋ง ํด๊ฒฐํ๊ณ ๋๋ด๋ ๊ฒ์ด ์๋, ๋ฌธ์ ์ ๋ฐฐ๊ฒฝ์ ์ดํดํ๊ณ ์๋ฆฌ๋ฅผ ์์๋ณด๋ ๊ฑด ์ด๋จ๊น์? ์ธ์ ๋ฐ๋ ๊ฐ๋ฐ์๊ฐ ๋๋ ์ฒซ๊ฑธ์์ผ๋ก ๋ง์ ๋๋ค.
๋ฆฌ์กํธ์ ์ฌ์กฐ์ (Reconciliation) ๊ณผ์ ์์๋ ์ง๊ธ๊น์ง ์๊ฐํ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ง์ ์ผ์ด ๋ฒ์ด์ง๋๋ค. ๊ด์ฌ์ด ์๋ค๋ฉด React Reconciliation ํค์๋๋ฅผ ๊ฒ์ํด ๋ณด์ธ์! โฉ๏ธ