๐๊ฐ์๋์ ๊ฐ๋
- ๊ณต์๋ฌธ์ ์ ์
The virtual DOM (VDOM) is a programming concept where an ideal, or โvirtualโ, representation of a UI is kept in memory and synced with the โrealโ DOM by a library such as ReactDOM. This process is called reconciliation.
๊ฐ์์ผ๋ก UI๋ฅผ ๋ฒ์ธ์ผ๋์ ์ ์ฅํด๋์๋ค๊ณ Real Dom๊ณผ ์ฐ๋(sync) ์์ผ์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ์ปจ์
์ผ๋ช
reconciliation(ํํด) ๊ณผ์ ์ด๋ผ ์ ์
๐Diffing ์๊ณ ๋ฆฌ์ฆ
- ๋ฆฌ์กํธ๋ Real Dom๊ณผ Virtual Dom์ ์ฐธ๊ณ ํ๋ฉด์ diffing ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ๋ณํ๊ฐ ์ผ์ด๋ DOM ์์๋ง ์๋ก ๋ ๋๋งํจ
- ๋ณํ๊ฐ ์ผ์ด๋จ State Change - ์ ์ฒด UI๋ฅผ ๊ฐ์๋์ ๋ฆฌ๋ ๋๋ง
- ๋ณํ์ ์ ๊ฐ์๋๊ณผ ๋ณํ๋ ๊ฐ์๋ ๋น๊ต - Compute Diff
- ๋ฐ๋ ๋ถ๋ถ๋ง Real Dom ๋ณ๊ฒฝ(๋นจ๊ฐ ์์ญ์์ ๋ ์ด์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ๋ค๋ฉด, ์ค์ dom์์๋ ๊ฐ์๋ ๋๋ถ์ ๋ ์ด์์ ๊ณ์ฐ์ด ์ผ๊ด๋ก ๋จ ํ๋ฒ ์ดํ)
๐์์
1. element ๋ณ๊ฒฝ
//๋ณ๊ฒฝ ์
<div>
<Counter/>
</div>
//๋ณ๊ฒฝ ํ
<span>
<Counter/>
</span>
- ์์ํ๊ทธ๊ฐ div์์ span์ผ๋ก ๋ฐ๋๊ฒ ๋๋ฉด ํ์ Counter ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๋ฐ๋์ง ์๋๋ผ๋ ๋ฆฌ์กํธ๋ ๋ชจ๋ ๊ฐ์์๊ณ ์๋ก์ด Dom์ ์์ฑ
2. attribute ๋ณ๊ฒฝ
//๋ณ๊ฒฝ ์
<div className="before" title="example" />
//๋ณ๊ฒฝ ํ
<div className="after" title="example" />
- ๊ฐ์๋์ ํ์ฉํด Dom ์ ์ ์ง์ํค๊ณ , className ์์ฑ๋ง ๋ฐ๊ฟ, ํจ์จ์ ์ผ๋ก ๋ ๋๋ง ๊ฐ๋ฅ
3. ํ์ ์์ ์ถ๊ฐ
//๋ณ๊ฒฝ์
<ul>
<li>first</li>
<li>second</li>
</ul>
//๋ณ๊ฒฝํ
<ul>
<li>first</li>
<li>second</li>
<li>third</li> //์ฌ๊ธฐ๋ง ์ถ๊ฐ.
</ul>
- diffing ์๊ณ ๋ฆฌ์ฆ์ ์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ ๋ฆฌ์คํธ๊ฐ ๊ฐ์ ๊ฒ์ ํ์ธํ๊ณ ์ธ๋ฒ์งธ๊ฐ ๋ค๋ฅธ๊ฑธ ํ์ธํ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฒ์งธ๋ง ์ถ๊ฐ
3-1. ์์ธ
//๋ณ๊ฒฝ์
<ul>
<li>first</li>
<li>second</li>
</ul>
//๋ณ๊ฒฝํ
<ul>
<li>๋Firstํ ๊ฑฐ์ผ!</li> //์ฌ๊ธฐ๋ง ์ถ๊ฐ๋์์ง๋ง ์ฒซ๋ฒ์งธ ์์
<li>first</li>
<li>second</li>
</ul>
- ๋ฆฌ์กํธ๊ฐ ์ฒซ๋ฒ์งธ๋ง ํ์ ํด์ ์ถ๊ฐํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ฒ ์ง๋ง, ์ฒซ๋ฒ์งธ ๋ฆฌ์คํธ๊ฐ ๋ฐ๋๊ฒ์ ๋ณด๊ณ li์ ๋ชจ๋ ์์๋ฅผ ์๋ก ๋ ๋๋งํจ
- ๊ทธ๋์ key๊ฐ ํ์ํจ
4. key
//๋ณ๊ฒฝ์
<ul>
<li key="1">first</li>
<li key="2">second</li>
</ul>
//๋ณ๊ฒฝํ
<ul>
<li key="๊ทธ๋ํด๋ผ">Firstํ ๊ฑฐ์ผ!</li> //์ฌ๊ธฐ๋ง ์ถ๊ฐ๋์์ง๋ง ์ฒซ๋ฒ์งธ ์์
<li key="1">first</li>
<li key="2">second</li>
</ul>
- key๋ฅผ ์ง์ ํด์ฃผ๋ฉด, ์์๊ฐ ๋ค๋ฅด๋๋ผ๋ ์ฒ์๋ถํฐ ๋ ๋๋งํ์ง ์๊ณ ๋ณํ๊ฐ ์๊ธด ๋ถ๋ถ๋ง ๋ ๋๋ง
- key๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฆฌ์กํธ์์ warning์ ๋ณด๋ด๋ ์ด์ ์ค ํ๋
์ฐธ๊ณ
https://dj-min43.medium.com/%EB%A6%AC%EC%95%A1%ED%8A%B8-virtual-dom-%EA%B0%80%EC%83%81%EB%8F%94-%EB%B2%84%EC%B6%94%EC%96%BC%EB%8F%94-%EC%9D%B4%EB%9E%80-359c28112048
https://velog.io/@mollog/React%EC%97%90%EC%84%9C%EC%9D%98-%EA%B0%80%EC%83%81%EB%8F%94-%EA%B0%9C%EB%85%90
'CS ๊ณต๋ถ - front' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฆฌ์กํธ] flux ํจํด๊ณผ, ๋ฏธ๋ค์จ์ด ์ข ๋ฅ ๋ฐ ์ฅ๋จ์ (0) | 2023.02.23 |
---|---|
[JS] ๊น์๋ณต์ฌ vs ์์๋ณต์ฌ (0) | 2023.02.15 |
[JS] var vs let vs const (0) | 2023.02.15 |
[React] ํจ์ํ๊ณผ ํด๋์คํ์ ์ฅ๋จ์ ๋น๊ต (0) | 2023.02.15 |
[์น] ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋์ ๊ณผ์ - ๋ ๋๋ง ์์ง (0) | 2023.02.12 |