React๋ฅผ ์ฌ์ฉํ๋ฉด์ ํธ๋ฆฌํ๊ฒ ๋๊ปด์ก๋ ๋ถ๋ถ์ ๊ธฐ์กด์๋ ํ๋์ฝ๋ฉ์ ํตํด์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ๋ ์ฝ๋๋ค์ ๋ฐ์ดํฐ๋ง ์๋ค๋ฉด map()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค๋ ์ ์ด์๋ค. ํ์ง๋ง, ์ฒ์ map()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ํ์ ์์๋ค ์ฌ์ด์ ์ ์ผํ ํค๊ฐ์ ๋ถ์ฌํธ๋ค๋ ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋ ๊ฒ์ ๋ณด๊ฒ ๋๋ค.
"์๋... ํธ๋ฆฌํ๊ณ ์ข์๋ฐ... key๋ฅผ ์ ๊ตณ์ด ๋ถ์ฌํด์ผํ๋๊ฑฐ์ผ?" ๋ผ๋ ์๋ฌธ์ด ๋๋๋ฐ ์ด์ ๋ํด์ ์ ๋ฆฌํด๋ณด์.
React์์๋ props์ ํตํด์ key
๊ฐ์ ๋ถ์ฌํ ์ ์๋ค. ์ฃผ๋ก ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ค์ map()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ง์ฝ key
๊ฐ์ ๋ถ์ฌํ์ง ์์ผ๋ฉด ์๋์ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
Each child in an array should have a unique โkeyโ prop.
๊ทธ๋ ๋ค๋ฉด key
๊ฐ์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด๋ ํน์ ์์์ ๋ณํ(์ถ๊ฐ, ์ญ์ ๋ฑ)์ ์๊ธฐ ์ํด์ ํ์ํ ๊ฐ์ด๋ค. ๋ฆฌ์กํธ์ ๊ฒฝ์ฐ state
์ ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ์ render()
ํจ์๊ฐ ๊ณ์ ํธ์ถ๋๋๋ฐ ์ด ๊ฒฝ์ฐ์ ๊ฐ์ DOM
์ ์ด์ฉํด์ ๋ณํ๊ฐ ์๋ ์์๋ง์ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ํ๋ค.
๊ทธ๋ ๋ค๋ฉด, key
๊ฐ์๋ ์ด๋ค ๊ฐ๋ค์ ๋ฃ์ด์ค ์ ์์๊น. ๋ณดํต ๋ฐฐ์ด์ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ๋ถ์ฌํด์ฃผ๋ฉด ๊ด์ฐฎ๋ค๋ ์๊ฐ์ ํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๋ณดํต์ ๊ฒฝ์ฐ์ ์ข์ง ๋ชปํ ์๊ฐ์ด๋ค.
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ์ค๋ณต๋ ๊ฐ์ด ๋ค์ด๊ฐ ์ผ์ ์์ด์ ํธ๋ฆฌํ ์ ์์ง๋ง ๋ง์ฝ ์๋์ ๊ฐ์ ์ํฉ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
key : 0 {userName: "dream", age:24}
key : 1 {userName: "sodis", age:20}
key : 2 {userName: "worms", age:14}
์์ ๊ฐ์ ์์๋ค์ map()
์ผ๋ก ๋๋ฆฌ๋ฉด์ ์ธ๋ฑ์ค๋ฅผ ํค ๊ฐ์ผ๋ก ์คฌ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ฐฐ์ด์ ๋งจ ์์ setState()
๋ฅผ ํตํด์ {userName: "jezz", age:33}
์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์จ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์์ด๋๋ก ์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ๊ฐ๋ค์ ์ธ๋ฑ์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด์ ์์ด๋๋ก ๋ณ๊ฒฝ๋๋ ์ฐธ์ฌ๊ฐ ์ผ์ด๋๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋ฐฐ์ด์ ์ ์ฒด ์์ดํ
์ ๋ ๋๋ง์ด ๋ค์ ์ผ์ด๋๊ฒ ๋๊ณ ์ด๋ ๋ญ๋น๊ฐ ๋ ๊ฒ์ด๋ค.
๋ฌผ๋ก , ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ ์ ์ธ ๋ฐ์ดํฐ๋ก์ ๋ฐฐ์ด์ ๊ตฌ์ฑ์ด ๋ฐ๋ ์ผ์ด ์๋ ๊ฒฝ์ฐ, ์ ๋ ฌ์ด๋ ํํฐ ์์๊ฐ ํ์ ์๋ ๊ฒฝ์ฐ ๋ฑ์ด๋ค.
key
๋ ์๋ก ๊ฒน์น์ง ์์ ๊ฐ์ด๋ผ๋ฉด ์ด๋ค ๊ฐ์ ์ฌ์ฉํด๋ ์ข๋ค. ํนํ ์๋ก ์์ฑ๋๋ ์์๋ผ๋ฉด Date.now()
๋ฑ๋ ํ๋์ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ด๋ค. ์ถ๊ฐ๋ก key
๊ฐ์ ์ค๋ณต์ ๊ฐ์ ํ์ ์์์ ๊ฒฝ์ฐ์๋ง ํด๋นํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ์์์์ ๊ด๊ณ์ฑ์ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
ํ์ฌ ์ ์ ์ธ ๋ฐ์ดํฐ๊ฐ ์ธ์ ๋ ์ ์ ์ด๋ผ๊ณ ํ์ ํ๊ธฐ๋ ์ด๋ ต๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ต๋ํ ์ธ๋ฑ์ค์ ์ฌ์ฉ์ ์ง์ํ๋ฉด์ ์ ์ง๋ณด์์ ์ข์ ๋ฐฉํฅ์ผ๋ก ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๐ ์ฐธ์กฐ
https://ko.reactjs.org/docs/lists-and-keys.html#gatsby-focus-wrapper
https://www.youtube.com/watch?v=ghxHAy3LH28
https://ko.reactjs.org/docs/reconciliation.html#recursing-on-children
https://velog.io/@rhfovk/TIL-19React%EC%97%90%EC%84%9C-key%EC%9D%98-%EC%97%AD%ED%95%A0