โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
React์์ state๋ props๊ฐ ๊ฐฑ์ ๋๋ฉด render()
ํจ์๋ ์๋ก์ด React ์๋ฆฌ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ฐํํ๋ค. ์ด ๋ React๋ ๋ ๊ฐ์ง ๊ฐ์ ์ ๊ธฐ๋ฐํ์ฌ O(n) ๋ณต์ก๋์ ํด๋ฆฌ์คํฑ ์๊ณ ๋ฆฌ์ฆ
์ผ๋ก ๋น๊ต ์ฐ์ฐ์ ์ํํ๋ค.
- ์๋ก ๋ค๋ฅดํ์ ์ ๋ ์๋ฆฌ๋จผํธ๋ ์๋ก ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
- ๊ฐ๋ฐ์๊ฐ key prop์ ํตํด, ์ฌ๋ฌ ๋ ๋๋ง ์ฌ์ด์์ ์ด๋ค ์์ ์๋ฆฌ๋จผํธ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ ํ ์ง ํ์ํด ์ค ์ ์๋ค.
๋ ๊ฐ์ ํธ๋ฆฌ๋ฅผ ๋น๊ตํ ๋ React๋ ๋ ์๋ฆฌ๋จผํธ์ ๋ฃจํธ ์๋ฆฌ๋จผํธ๋ถํฐ ๋น๊ตํ๋ค.
๋ ๋ฃจํธ ์๋ฆฌ๋จผํธ์ ํ์ ์ด ๋ค๋ฅด๋ฉด, React๋ ์ด์ ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์์ ํ ์๋ก์ด ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ค.
// ๋ฐ๋๊ธฐ ์
<div>
<Counter />
</div>
// ๋ฐ๋ ํ
<span>
<Counter />
</span>
๋ฐ๋๊ธฐ ์ , ํ์ div
์์ span
์ผ๋ก ๋ฐ๋๊ฒ ๋๋ฉด ํธ๋ฆฌ ์ ์ฒด๋ฅผ ์ฌ๊ตฌ์ถํ๊ฒ ๋๋ค. ์ด์ Counter
์ปดํฌ๋ํธ๋ ์ฌ๋ผ์ง๊ณ ์๋ก ๋ค์ ๋ง์ดํธ๋๋ค. ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ฒ ๋๋ฉด ์ด์ DOM ๋
ธ๋๋ค์ ๋ชจ๋ ํ๊ดด๋๋ค.
๊ฐ์ ํ์ ์ ๋ React DOM ์๋ฆฌ๋จผํธ๋ฅผ ๋น๊ตํ ๋, React๋ ๋ ์๋ฆฌ๋จผํธ์ ์์ฑ์ ํ์ธํ์ฌ, ๋์ผํ ๋ด์ญ์ ์ ์งํ๊ณ ๋ณ๊ฒฝ๋ ์์ฑ๋ค๋ง ๊ฐฑ์ ํฉ๋๋ค.
// classNmae๋ง ์์
<div className="before" title="stuff" />
<div className="after" title="stuff" />
// color ์์ฑ style๋ง ๊ฐฑ์
<div style={{color: 'red', fontWeight: 'bold'}} />
<div style={{color: 'green', fontWeight: 'bold'}} />
์ปดํฌ๋ํธ๊ฐ ๊ฐฑ์ ๋๋ฉด ์ธ์คํด์ค๋ ๋์ผํ๊ฒ ์ ์ง๋์ด ๋ ๋๋ง ๊ฐ state๊ฐ ์ ์ง๋๋ค.
DOM ๋ ธ๋์ ์์๋ค์ ์ฌ๊ท์ ์ผ๋ก ์ฒ๋ฆฌํ ๋, React๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์์ ๋ ๋ฆฌ์คํธ๋ฅผ ์ํํ๊ณ ์ฐจ์ด์ ์ด ์์ผ๋ฉด ๋ณ๊ฒฝํ๋ค.
<ul>
<li>first</li>
<li>second</li>
</ul>
// ๋งจ ์์ <li>third</li>๋ฅผ ํธ๋ฆฌ์ ์ถ๊ฐ๋๋ฉด ์ฑ๋ฅ์ด ์ข์ง ์๋ค.
<ul>
<li>third</li>
<li>first</li>
<li>second</li>
</ul>
React๋ key๋ฅผ ํตํด ๊ธฐ์กด ํธ๋ฆฌ์ ์ดํ ํธ๋ฆฌ์ ์์๋ค์ด ์ผ์นํ๋์ง ํ์ธํ๋ค.
<ul>
<li key="1">first</li>
<li key="2">second</li>
</ul>
// "3" key๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๋ ์ด๋๋ง ํ๋ฉด ๋๋ค.
<ul>
<li key="3">third</li>
<li key="1">first</li>
<li key="2">second</li>
</ul>
์ปดํฌ๋ํธ ์ธ์คํด์ค๋ key๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐฑ์ ๋๊ณ ์ฌ์ฌ์ฉ๋๋ค.
React๋ ํญ์ ์ ์ฒด ์ฑ์ ์ฌ๋ ๋๋งํ ์ ์์ง๋ง ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ ํญ์ ๊ฐ๋ค. ์ฌ๋ ๋๋ง์ ๋ชจ๋ ์ปดํฌ๋ํธ์ render()
์ ํธ์ถํ๋ ๊ฒ์ด์ง React๊ฐ ์ธ๋ง์ดํธ์ํค๊ณ ๋ค์ ๋ง์ดํธ ํ๋ ๊ฒ์ด ์๋๋ค. ์ฆ, ๋ ๋๋ง ์ ํ์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ ์ฉํ๋ ๊ฒ์ด๋ค.
React๋ ํด๋ฆฌ์คํฑ์ ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์, ํด๋ฆฌ์คํฑ์ด ๊ธฐ๋ฐํ๊ณ ์๋ ๊ฐ์ ์ ๋ถํฉํ์ง ์๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ๋๋น ์ง ์ ์๋ค.
"์ฌ๋ ๋๋ง์ React๊ฐ ์ธ๋ง์ดํธ ์ํค๊ณ ๋ค์ ์ธ๋ง์ดํธ ํ๋ ๊ฒ์ด ์๋๋ค." ๋ ๋๋ง ์ ํ์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ ์ฉํ๋ ๊ฒ์ด๋ค!
์ด ๊ฐ๋
์ด ์ ๊น ํ๋ ค์ก๋ ๊ฒ ๊ฐ์๋ฐ ํ์คํ ์๊ฒ๋์๋ค.