๋ฆฌ์กํธ์๋ virtual DOM์ด๋ผ๊ณ ํ๋ ๊ฐ์์ DOM ๊ฐ์ฒด๊ฐ ์๋ค.
์ด ๊ฐ์์ DOM ๊ฐ์ฒด๋ ์ค์ DOM์ ์ฌ๋ณธ ๊ฐ์ ๊ฐ๋ ์ผ๋ก, ๋ฆฌ์กํธ๋ ์ค์ DOM ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๋์ ์ด ๊ฐ์์ DOM ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ๋ณํ ์ , ํ๋ฅผ ๋น๊ตํ๊ณ ๋ฐ๋ ๋ถ๋ถ๋ง ์ ์ฉํ ์ ์๋ค. ????
(์ง์ง) DOM์ด๋?
Document Object Model = ๋ธ๋ผ์ฐ์ ๊ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง๋ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ค.
JS ๊ฐ์ ์คํฌ๋ฆฝํ ์ธ์ด๊ฐ ํ๊ทธ๋ค์ ์ ๊ธํด์ ์กฐ์ํ ์ ์๋๋ก ํ๊ทธ๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ฐ์ฒดํ ์ํจ ๊ฒ์ด๋ค.
DOM์ด ์ ํ๋ฆฌ์ผ์ด์ ์ UI ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ๋ด๊ธฐ ์ํด ์ ๋ฐ์ดํธ๊ฐ ๋๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๊ณ , DOM์ ์กฐ์ ์๋๊ฐ ๋๋ ค์ง๋ค.
DOM์ด ๋ณ๊ฒฝ๋๊ณ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด ๋ฆฌํ๋ก์ฐํ๊ณ ๋ฆฌํ์ธํ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ, ๋ ์ด์์ ๋ฐ ํ์ดํธ์ ํด๋นํ๋ ์ฌ์ฐ์ฐ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๊ทธ๋งํผ ๋๋ ค์ง๊ฒ ๋๋ค.
๐ค ๋ฐ๋ ๋ถ๋ถ๋ง ๋น๊ตํด์ ๊ทธ ๋ถ๋ถ๋ง ๋ ๋๋ง์ ํ ์๋ ์์๊น? ๐ค
๊ฐ์ DOM์ ์ฌ์ฉํ์!
๊ฐ์ DOM์ ๊ฐ์์ UI ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง์ํค๊ณ , ๊ทธ ์ ์ง์ํจ ๊ฐ์์ UI ์์๋ฅผ ๋ฆฌ์กํธDOM๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ค์ DOM๊ณผ ๋๊ธฐํ ์ํจ๋ค.
- ์ค์ DOM์ ์กฐ์ํ๋ ๊ฒ์ ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ์ง๋ง, ๊ฐ์ DOM์ ์กฐ์ํ๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๊ฐ์ DOM ์ ํ ์ฐจ์ด๋ฅผ ๋น๊ตํด์ ์ค์ DOM์ ๋ณ๊ฒฝ์ ์ํํ ์ ์๋ ์ต์์ ๋ฐฉ๋ฒ์ ๊ณ์ฐํ๊ณ , ๋ถ๋ถ์ ์ผ๋ก ๋ฆฌ๋ ๋๋ง์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ DOM์ผ๋ก ํ๊บผ๋ฒ์ ์ ๋ฐ์ดํธ ๋๋ค.
๊ฐ์ DOM์ ์ค์ DOM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก HTML ๋ฌธ์ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
React๊ฐ DOM ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ & key ๊ฐ์ ์ค์ ํ๋ ์ด์
๋ฆฌ์กํธ๋ ํธ๋ฆฌ์ ๋ ๋ฒจ ์์๋๋ก ์ํํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ๋ค. (์ผ์ข ์ ๋๋น ์ฐ์ ํ์ BFS)
- ํ๊ทธ๊ฐ ๋ฌ๋ผ์ง์ง ์์๋ค๋ฉด ์ต๋ํ ๋ ๋๋ง์ ํ์ง ์๋ ๋ฐฉํฅ์ผ๋ก ์ต์ํ์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ๋ฐ์ดํธํ๋ค.
- ๋ถ๋ชจ ํ๊ทธ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์ด์ ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋ก์ด ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ค.
- ์์์ ์๋๋ก ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋๋ฐ, ์๋ก์ด ํ๊ทธ๋ฅผ ์์ ์๋ฆฌ๋จผํธ์ ์ฒ์์ ์ฝ์ ํ๋ฉด ๋ฆฌ์กํธ๋ ์์ ์๋ก์ด ๋ ธ๋๋ก ์ธ์งํ๊ณ ์๋กญ๊ฒ ๋ ๋๋ง์ ํด๋ฒ๋ฆฐ๋ค.
๊ทธ๋์ key ๊ฐ์ ์ค์ ํ๋ค!!
key๋ฅผ ํตํด์ ๋ณํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค! key๋ ์ ์ญ์ ์ผ๋ก ์ ์ผํ ํ์๊ฐ ์๊ณ , ํ์ ์๋ฆฌ๋จผํธ ์ฌ์ด์์๋ง ์ ์ผํ๋ฉด ๋๋ค.
๋ง์ฝ, ์ ๋ํฌํ ๊ฐ์ด ์๋ค๋ฉด ์ตํ์ ์๋จ์ผ๋ก ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ๋ฐฐ์ด์ด ๋ค๋ฅด๊ฒ ์ ๋ ฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด, ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ ํํ ๊ฒฝ์ฐ ๋ฆฌ์กํธ๊ฐ ๋นํจ์จ์ ์ผ๋ก ๋์ํ๊ฒ ๋๋ค. => ๋ฐฐ์ด์ด ๋ฌ๋ผ์ ธ๋ ์ธ๋ฑ์ค๋ฅผ ๊ทธ๋๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ฑ์ค๋ ๊ทธ๋๋ก์ง๋ง, ์์๊ฐ ๋ฐ๋๋ฉด ๋ฆฌ์กํธ๋ ๋ฐฐ์ด ์ ์ฒด๊ฐ ๋ฐ๋์๋ค๊ณ ๋ฐ์๋ค์ด๊ณ , ๊ธฐ์กด์ DOM ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ , ์๋ก์ด DOM ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํด๋ฒ๋ฆฐ๋ค.
๐ ์๋ชป๋ ๊ฐ๋ ์ ๋ฌ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค. ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ฉ๋๋ค๐ค
'๐ฅFrontEnd > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Custom Hook, Custom Hook ์ฅ์ , ๊ท์น (0) | 2022.07.27 |
---|---|
๋ฆฌ์กํธ ๋ ๋๋ง ์ต์ ํํ๊ธฐ, useMemo์ ํ์์ฑ, useCallback, useCallback๊ณผ ์ฐธ์กฐ ๋๋ฑ์ฑ (0) | 2022.07.27 |
๋ฆฌ์กํธ ํ ์ฌ์ฉ ๊ท์น (0) | 2022.07.26 |
๋ฆฌ์กํธ Context ,๋ฆฌ์กํธ ์ปจํ ์คํธ์ ํ๊ณ (0) | 2022.07.26 |
TIL) useState์ useReducer๋ฅผ ์ธ์ ์ธ์ง ๊ตฌ๋ถํ๊ธฐ (0) | 2022.07.25 |