๐ก Virtual DOM์ React๊ฐ ๋น ๋ฅด๊ฒ UI๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ๋
โ ๊ฐ์ DOM์ ์ค์ DOM์ ์ถ์ํํ ๊ฒฝ๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด
โ UI๋ฅผ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ๊ณ , ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ์ ์ต์ ํ
โ React๋ ๊ฐ์ DOM์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธ
โ React, Vue.js์์ ์ฌ์ฉ
โ ํ์ง๋ง React์์ "๊ณต์์ ์ผ๋ก๋" ๊ฐ์DOM์ด๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ (๋ง์ ์ด์ ๊ฐ ์์ง๋ง react๋ ์น๊ฐ๋ฐ ์ธ์๋ react native ๋ฑ DOM ์กฐ์์ด ์๋๋๋ผ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ)
๊ฐ์ DOM ์์ฑ
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ฉด, React๋ ํด๋น ์ปดํฌ๋ํธ์ ๊ฐ์ DOM์ ์์ฑ
(๊ฐ์ DOM์ ์ค์ DOM๊ณผ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ์์์๋ง ์กด์ฌํ๋ ๊ฐ์ฒด)
๋ณ๊ฒฝ ์ฌํญ ๋น๊ต (diffing)
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ์๋ก์ด ๊ฐ์ DOM์ ์์ฑํ์ฌ ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ต (="diffing")
๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์ (reconciliation)
๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ค์ DOM์ ์ ๋ฐ์ดํธ
์ด ๊ณผ์ ์ reconciliation์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ ๋ถ๋ด์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๋์ฌ์ค
const [text, setText] = useState("์๋
");
function updateText() {
setText("ํ์ธ์");
}
return (
<div>
<p>{text}</p>
<button onClick={updateText}>๋ฒํผ</button>
</div>
);
์ ์ฝ๋์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด setText
๊ฐ ํธ์ถ๋์ด ์ํ๊ฐ ๋ณ๊ฒฝ
React๋ ๊ฐ์ DOM์ ์ ๋ฐ์ดํธํ๊ณ , ๋ณ๊ฒฝ๋ ๋ถ๋ถ(ํ ์คํธ)๋ง ์ค์ DOM์ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ ์ต์ ํ
๋น ๋ฅธ ๋ ๋๋ง
React๋ ๊ฐ์ DOM์ ์ฌ์ฉํด UI์ ๋ณ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ
๊ฐ์ DOM์ ์ด์ฉํด ๋ณ๊ฒฝ ์ฌํญ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ๊ณ์ฐํ ํ, ์ค์ DOM์ ํ์ํ ์ต์ํ์ ๋ณ๊ฒฝ๋ง ์ํํ๋ฏ๋ก ์ฑ๋ฅ ํฅ์
์ต์ํ์ ์ ๋ฐ์ดํธ
๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์ํ๋ฏ๋ก, ๋ถํ์ํ DOM ์กฐ์์ด ์ต์ํ
ํนํ DOM ์กฐ์์ด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํจ๊ณผ์
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์ต์ํ
https://doqtqu.tistory.com/316
https://junilhwang.github.io/TIL/Javascript/Design/Vanilla-JS-Virtual-DOM/#_2-jsx