์ต์ ์ํ๋ 2019๋ 6์ 5์ผ ์ ๋ฐ์ดํธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. https://github.com/facebook/react/issues/13525#issuecomment -499196939
์ฌํด React ํ์ ์ฃผ๋ก React์ ๊ทผ๋ณธ์ ์ธ ๊ฐ์ ์ ์ค์ ์ ๋์์ต๋๋ค.
์ด ์์ ์ด ์๋ฃ์ ๊ฐ๊น์์ง๋ฉด์ ์ฐ๋ฆฌ๋ React DOM์ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๊ฐ ์ด๋ค ๋ชจ์ต์ผ์ง ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ์๋ ค์ง ๋ฌธ์ ๊ฐ ๊ฝค ์์ผ๋ฉฐ ๊ทธ ์ค ์ผ๋ถ๋ ๋ ํฐ ๋ด๋ถ ๋ณ๊ฒฝ ์์ด ํด๊ฒฐํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์๋ง์ ํ์ ์์ ์ ์ผ์ผํค๊ณ ๋ง์ ๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ๋ง๋ ๊ณผ๊ฑฐ์ ์ค์๋ฅผ ๋๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ React์ ์ฒซ ๋ ์ดํ๋ก ๊ฑฐ์ ์๋์ง ์์๊ณ ํจ์ฌ ๋ณต์กํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ์ ์์ธ์ด ๋๋ ์ด๋ฒคํธ ์์คํ ์ ์ถ์ํ ์ค ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ๊ณ ์ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ ธ๋ ฅ์ "React Fire"๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
React Fire ๋ React DOM์ ํ๋ํํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ React๊ฐ DOM ์๋ ๋ฐฉ์๊ณผ ๋ ์ ์ผ์นํ๋๋ก ํ๊ณ , ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ๊ณผ๊ฑฐ ๊ฒฐ์ ์ ๋ค์ ๋ฐฉ๋ฌธํ๊ณ , React๋ฅผ ๋ ์๊ณ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ผ๋ถ๋ ๋ถํํ๋ ์ค๋จ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํฅํ React ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ์ด ๋ณ๊ฒฝ ์ฌํญ ์ธํธ๋ฅผ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Facebook์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ๋ํด ์ ์งํ๊ฒ ์ค๋ช ํ ์ ์๋ 50,000๊ฐ ์ด์์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๋ช ๊ฐ์ง ๋์ ์์ ๋๋ ์๋ํ๋ ์ฝ๋ ๋ชจ๋๋ฅผ ์ ์ธํ๊ณ ๋ ์ ํ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ ์ฌ์ ๊ฐ ์์ต๋๋ค.
ํ์ฌ ๊ณํ์ ๊ตฌ์ฑํ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ฌํญ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ง๋ง ์ง๊ธ๊น์ง ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
value
์์ฑ์ ์
๋ ฅ ๊ฐ ๋ฐ์์ ์ค์งํฉ๋๋ค(https://github.com/facebook/react/issues/11896). ์ด๊ฒ์ ์๋ https://github.com/facebook/react/pull/6406์ ํตํด React 15.2.0์ ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ๋๋ค์ DOM ๊ฐ๋
์ ๋ชจ๋ธ์ด DOM ๊ฒ์ฌ๊ธฐ์์ ๋ณด๋ value
๊ฐ value
JSX ์์ฑ๊ณผ ์ผ์นํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ DOM์ด ์๋ํ๋ ๋ฐฉ์์ ๊ทธ๋ ์ง ์์ต๋๋ค. ํ๋์ ์
๋ ฅํ ๋ ๋ธ๋ผ์ฐ์ ๋ value
์์ฑ์ ์
๋ฐ์ดํธํ์ง ์์ต๋๋ค. React๋ ํ๋ฉด ์ ๋ฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ CSS ์ ํ๊ธฐ์ ์์กดํ๋ ์ผ๋ถ ์ฝ๋์ ๋์์ด ๋ ์ ์์ง๋ง ์ผ๋ จ์ ๋ฒ๊ทธ๋ฅผ ์ผ์ผ์ผฐ์ต๋๋ค. ๊ทธ ์ค ์ผ๋ถ๋ ์ฌ์ ํ ์์ ๋์ง ์์์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ผ๋ถ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/facebook/react/issues/7179 , https://github.com/facebook/react/issues/8395 , https://github.com/facebook /react/issues/7328 , https://github.com/facebook/react/issues/7233 , https://github.com/facebook/react/issues/11881 , https://github.com/facebook/react /issues/7253 , https://github.com/facebook/react/pull/9584 , https://github.com/facebook/react/pull/9806 , https://github.com/facebook/react/pull /9714 โโ, https://github.com/facebook/react/pull/11534 , https://github.com/facebook/react/pull/11746 , https://github.com/facebook/react/pull/12925 . ์ด ์์ ์์ ๋ธ๋ผ์ฐ์ ์ ๊ณ์ ์ธ์ฐ๋ ๊ฒ์ ๋ถ๋ช
ํ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ ๋๋๋ ค์ผ ํฉ๋๋ค. ์ด ์ฌ์ ์ ๊ธ์ ์ ์ธ ๋ถ๋ถ์ DOM ๊ธฐ์ฌ์( @nhunzaker , @aweary , @jquense ๋ฐ @philipp-spiess)์ ์ง์น ์ค ๋ชจ๋ฅด๋ ์์
๋๋ถ์ ์ด์ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ ์์ธํ DOM ํ
์คํธ ๊ณ ์ ์ฅ์น๋ฅผ ๊ฐ๊ฒ ๋์๋ค๋ ๊ฒ์
๋๋ค.
๋ฌธ์๊ฐ ์๋ React ๋ฃจํธ์ ์ด๋ฒคํธ๋ฅผ ์ฒจ๋ถํฉ๋๋ค(https://github.com/facebook/react/issues/2043). ๋ฌธ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ React ์ฑ์ ๋ ํฐ ์์คํ
์ ํฌํจํ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. Atom ํธ์ง๊ธฐ๋ ์ด์ ์ถฉ๋ํ ์ฒซ ๋ฒ์งธ ์ฌ๋ก ์ค ํ๋์์ต๋๋ค. ๋ชจ๋ ๋ํ ์น์ฌ์ดํธ๋ ๊ฒฐ๊ตญ stopPropagation
๊ฐ ๋น React ์ฝ๋์ ์ํธ ์์ฉํ๊ฑฐ๋ React ๋ฃจํธ(https://github.com/facebook/react/issues/8693, https://github)์์ ์ํธ ์์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋งค์ฐ ๋ณต์กํ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. .com/facebook/react/pull/8117, https://github.com/facebook/react/issues/12518). ๋ํ ์
๋ฐ์ดํธ ์ค์ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ๋ ์ํํ ์ ์๋๋ก ๋ชจ๋ ๋ฃจํธ์ ์ด์ฌํ ์ด๋ฒคํธ๋ฅผ ์ฒจ๋ถํ๋ ค๊ณ ํฉ๋๋ค.
onChange
์์ onInput
๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ณ ์ ์ด๋์ง ์๋ ๊ตฌ์ฑ ์์์ ๋ํด ํด๋ฆฌํํ์ง ๋ง์ญ์์ค(https://github.com/facebook/react/issues/9657). ์์ธํ ๊ณํ์ ๋งํฌ๋ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์. React๊ฐ DOM์์ input
์ด๋ฒคํธ๋ผ๊ณ ํ๋ ์ด๋ฒคํธ์ ๋ํด ๋ค๋ฅธ ์ด๋ฒคํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ํผ๋์ค๋ฌ์ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํฐ ์ด์ ์์ด ์ด์ ๊ฐ์ ํฐ ๋ณ๊ฒฝ์ ํผํ์ง๋ง, ์ด ๊ฒฝ์ฐ ์ ์ด ์
๋ ฅ์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฃ์ง ์ผ์ด์ค์๋ง ํ์ํ ์ผ๋ถ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ๋์ ์ ๋ณ๊ฒฝํ๊ณ ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ ํจ๊ป ์ํํ๊ณ ์ด๋ฅผ ๊ธฐํ๋ก ์ฌ์ฉํ์ฌ onInput
๋ฐ onChange
๊ฐ ์ ์ด๋์ง ์๋ ๊ตฌ์ฑ ์์์ ๋ํด DOM ์ด๋ฒคํธ๊ฐ ์ํํ๋ ๊ฒ๊ณผ ์ ํํ ๋์ผํ๊ฒ ์๋ํ๋๋ก ํฉ๋๋ค.
์ด๋ฒคํธ ์์คํ ์ ๋ํญ ๊ฐ์ํํฉ๋๋ค(https://github.com/facebook/react/issues/4751). ํ์ฌ ์ด๋ฒคํธ ์์คํ ์ 2013๋ ์ฒ์ ๊ตฌํ๋ ์ดํ ๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค. React DOM ๋ฐ React Native์์ ์ฌ์ฌ์ฉ๋๋ฏ๋ก ๋ถํ์ํ๊ฒ ์ถ์์ ์ ๋๋ค. ์ ๊ณตํ๋ ๋ง์ ํด๋ฆฌํ์ ์ต์ ๋ธ๋ผ์ฐ์ ์ ํ์ํ์ง ์์ผ๋ฉฐ ์ผ๋ถ๋ ํด๊ฒฐํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ์์ฑํฉ๋๋ค. ๋ํ React DOM ๋ฒ๋ค ํฌ๊ธฐ์ ์๋น ๋ถ๋ถ์ ์ฐจ์งํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ฃผ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ด ์๋ ๊ฒ์ ์๋์ง๋ง ์ด๋ฒคํธ ์์คํ ์ ์์ ํ ๋ถ๊ธฐํ ๋ค์ DOM์ด ์ ๊ณตํ๋ ๊ฒ์ ๋ ๊ฐ๊น์ด ๋ค๊ฐ๊ฐ๋ฉด ์ผ๋ง๋ ์ต์ํ์ผ๋ก ๋ง๋ค ์ ์๋์ง ํ์ธํ ๊ฒ์ ๋๋ค. ํฉ์ฑ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ๊ฑฐํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. DOM์์ ๋ฒ๋ธ๋ง๋์ง ์๊ณ ๋ฒ๋ธ๋งํ ํ๋นํ ์ด์ ๊ฐ ์๋ ๋ฏธ๋์ด ์ด๋ฒคํธ์ ๊ฐ์ ๋ฒ๋ธ๋ง ์ด๋ฒคํธ๋ฅผ ์ค์งํด์ผ ํฉ๋๋ค. ํฌํธ์ ํตํ ๋ฒ๋ธ๋ง๊ณผ ๊ฐ์ ์ผ๋ถ React ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ์งํ๊ธฐ๋ฅผ ์ํ์ง๋ง ๋ ๊ฐ๋จํ ์๋จ(์: ์ด๋ฒคํธ ์ฌ์ ์ก)์ ํตํด ์ด๋ฅผ ์ํํ๋ ค๊ณ ํฉ๋๋ค. ์๋์ ์ธ ์ด๋ฒคํธ๊ฐ ์ด๊ฒ์ ์ผ๋ถ๊ฐ ๋ ๊ฒ์ ๋๋ค.
className
โ class
(https://github.com/facebook/react/issues/4331, https://github.com/facebook/react/issues/13525#issuecomment- ์ฐธ์กฐ) 417818906 ์๋). ์ด๊ฒ์ ์์์ด ์ ์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ class
๋ฅผ React 16์ DOM ๋
ธ๋๋ก ์ ๋ฌํ๋ ๊ฒ์ ํ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์์ฑํ๋ ํผ๋์ ๋ณดํธํ๋ ค๋ ๊ตฌ๋ฌธ ์ ํ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ณ๊ฒฝ์ ์์ฒด์ ์ผ๋ก ์ํํ์ง ์์ ๊ฒ์ด์ง๋ง ์์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๊ฒฐํฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ๊ตฌ์ฑ ์์ ์ํ๊ณ๊ฐ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ์์ด ๋ ๋ค ํ์ฉํ ์๋ ์์ต๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ ๋ ๋ค ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํ๋ฉฐ ์ถฉ๋ํ ์ํ์ด ์์ต๋๋ค. ๋ง์ ๊ตฌ์ฑ ์์๊ฐ className
๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์(์: ์ถ๊ฐํ์ฌ) ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
React Native Web๊ณผ ๊ฐ์ ํ๋ก์ ํธ์ ๋ํด ํ์ฌ ๋น๊ณต๊ฐ React ์ด๋ฒคํธ ์์คํ API๋ฅผ ๊ณ์ ๋ ธ์ถํ๋ ค๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ณ๊ฒฝ ์ค ์ผ๋ถ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ React Fabric ์ด ๋ ๋ง์ ์๋ต์ ์์คํ ์ ๊ธฐ๋ณธ ์ธก์ผ๋ก ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ React Native Web์ ๊ด๊ณ์์ด ๋ค๋ฅธ ์ ๋ต์ด ํ์ํฉ๋๋ค.
์ผ๋ถ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ์ค๋จํ๊ฑฐ๋ ๋ ๋ง์ ๋ ๋ฆฝํ ํด๋ฆฌํ์ด ํ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ IE11 ์ง์์ ์ ๊ฒฝ์ ์ฐ๊ณ ์์ง๋ง ๊ธฐ์กด์ ๋ธ๋ผ์ฐ์ ์ฐจ์ด์ ์ค ์ผ๋ถ๋ฅผ ๋งค๋๋ฝ๊ฒ ๋ง๋ค์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด๋ ๋ง์ ์ต์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ทจํ๋ ์ ์ฅ์ ๋๋ค.
์ด ๋จ๊ณ์์ ํ๋ก์ ํธ๋ ๋งค์ฐ ํ์์ ์ ๋๋ค. ์์ ๋ชจ๋ ์ฌํญ์ด ์คํ๋ ์ง๋ ํ์คํ์ง ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ Facebook์์ ์ด๋ฅผ dogfoodํ๊ณ ์ ์ง์ ์ธ ๋ฐฉ์์ผ๋ก ์๋ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ฅ ํ๋๊ทธ๋ฅผ ๋์ ํ๊ณ , ์ผ๋ถ ์ฝ๋๋ฅผ ๋ถ๊ธฐํ๊ณ , ์๊ท๋ชจ ๊ทธ๋ฃน์ ์ฌ๋๋ค์ ์ํด Facebook์์ ํ์ฑํ๋ ์ํ๋ก ์ ์งํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์คํ ์์ค 16.x ๋ฆด๋ฆฌ์ค๋ ์ด์ ๋์์ ์ ์งํ์ง๋ง ๋ง์คํฐ์์๋ ๊ธฐ๋ฅ ํ๋๊ทธ๋ฅผ ์ผ๊ณ ์คํํ ์ ์์ต๋๋ค.
๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๋ก์ ํธ๋ฅผ ์ง์ ์์ ํ ๊ณํ์ด์ง๋ง ๋ฐ์ด๋ ํ๋ ฅ์์ด์ React DOM์ ์ฃผ๋์ ์ผ๋ก ์ด๋์ด์จ @nhunzaker , @aweary , @jquense ๋ฐ @philipp-spiess์ ๋ ๋ง์ ํ ๋ก ๊ณผ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ Fiber์์ ์ผํ๊ณ ์์์ต๋๋ค. ํนํ ๊ด์ฌ ์๋ ๋ถ์ผ๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์๋ฉด ํด๊ฒฐํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด ๊ณํ์์ ๋ด๊ฐ ๋์น ๊ฒ์ด ์์ ์ ์์ต๋๋ค. ์ ๋ ํผ๋๋ฐฑ์ ๋งค์ฐ ๊ฐ๋ฐฉ์ ์ด๋ฉฐ ์ด ๊ธ์ด ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ์ด๊ฒ์ ์ข์ํ๋ค. ๋ฒ๋ค ํฌ๊ธฐ์ "ํด๋์ค" ์ํ์ ์ค์ด๋ ๊ฒ์ ๋งค์ฐ ํ์ํ ์ผ์ ๋๋ค.
ํ๋ฅญํ ์ผ!
๐
๊ด์ฌ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์! ๐คฃ
์์ฒญ๋!
className โ ์์ ์ ํ์์ ์ ๋๋ค
๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๋ค์ ์ด๋ป์ต๋๊น? clipPath
, htmlFor
, tabIndex
๋ฑ์ ๊ณ์ ํ๋ ๊ฒ์ด ์ด์ํด ๋ณด์
๋๋ค.
class
๋์
์ ๋์๊ด์ ์ด์ฌ์์๊ฒ ๋ณด๋ค ์น์ํ๊ฒ ๋ง๋๋ ์ค์ํ ๋ํ๊ตฌ์
๋๋ค. ์ถํํฉ๋๋ค.
์ด๊ฒ์ ๊ต์ฅํฉ๋๋ค. class
๋ก์ ์ด๋์ด ์ค์ ๋ก ์ํ๊ณผ ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
({ class }) => <div class={class} />
์ด ์ฒ์์ ์์ฝ๋ ํค์๋ ๋ฌธ์ ๋ฅผ ๋ํ๋ด๋ ๊ฒ ๊ฐ์ต๋๊น?
๋ฐ๊ฐ์ด ์์์ ๋๋ค @gaearon๋ ๊ฐ์ฌํฉ๋๋ค!
className
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ธํ๊ณ ์ด ๋ชจ๋ ์ ์ ์ข์ํฉ๋๋ค. ๋ค๋ฅธ ์ง์ ์ด ์ถ๊ตฌํ๋ ๋ชฉํ(DOM API์ ์ผ์น)์ ์์ ํ ๋ชจ์๋๋ ๊ฒ ๊ฐ์ต๋๋ค. React๋ HTML ์์ฑ์ด ์๋ DOM ์์ฑ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค(์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์์ ์์๋ ๋ช
ํํ ์ค๋ช
๋จ). DOM ์์ ์์ฑ์ ์ด๋ฆ์ className
๊ฐ ์๋๋ผ class
์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด React์์ ์ด๋ฆ์ด class
์ธ ์ด์ ๋ ๋ฌด์์
๋๊น?
ํ์์ ์ด์ผ! ๋ฒ๋ค ํฌ๊ธฐ ์ถ์์ ๋ํ ๋ชฉํ๊ฐ ์์ต๋๊น?
๐
๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๋ค์ ์ด๋ป์ต๋๊น? ์ฌ์ ํ clipPath, htmlFor, tabIndex ๋ฑ์ ์ํํ๋ ๊ฒ์ด ์ด์ํด ๋ณด์ ๋๋ค.
๋๋ ํ ๋ก ์ ์ฌ์ง๊ฐ ์์ง๋ง ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์น๊ฐ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค( for
์ ์ธ).
์ด๋ฒคํธ ์์คํ ์ ์ฌ์์ฑํ ๊ฒ์ด ์ด ์ ์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ ์๋นํ ๊ธฐํ๊ฐ ์์ต๋๋ค.
ํด๋ณด์!
JSX 2.0 ์ ๋์์ ์ถ์ํ๋ ์์ ๋ ํด๋ณผ ๊ฐ์น๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด์จ๋ ์ฌ๋๋ค์ ๋ช ๊ฐ์ง๋ฅผ ๋ค์ ๋ฐฐ์์ผ ํฉ๋๋ค. ๋ช ๊ฐ์ง๋ฅผ ๋ ๋ฒ ๋ฐ๋ณตํ๋ ๊ฒ๋ณด๋ค ํ ๋ฒ์ ๋ง์ ๊ฒ์ ๋ค์ ๋ฐฐ์์ผ ํ์ง ์์๊น์? ์ด ๊ธ์ ์ฝ์ผ๋ฉด์ ๋ฌธ๋ ๋ ์ค๋ฅธ ์๊ฐ.
๋๋ className ๋ณ๊ฒฝ์ ์ ์ธํ๊ณ ์ด๋ฌํ ๋ชจ๋ ์ ์ ์ข์ํฉ๋๋ค. ๋ค๋ฅธ ์ง์ ์ด ์ถ๊ตฌํ๋ ๋ชฉํ(DOM API์ ์ผ์น)์ ์์ ํ ๋ชจ์๋๋ ๊ฒ ๊ฐ์ต๋๋ค. React๋ HTML ์์ฑ์ด ์๋ DOM ์์ฑ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค(์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์์ ์์๋ ๋ช ํํ ์ค๋ช ๋จ).
๊ทธ๋ฌ๋ ์๋ ค์ง์ง ์์ ํค/๊ฐ ์์ ์ ๋ฌํ๋ฉด React 16 ์ดํ ์์ฑ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ๋ํ ๋ด ์๊ฒฌ์ React๊ฐ value
์์ฑ์ ์ค์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ์ฌ์ฉ์๊ฐ ์๋ชป๋์๋ค๋ ๊ฒ์
๋๋ค. React API๊ฐ API์์ ์์ฑ ์ด๋ฆ์ ์ฌ์ฉํ๋์ง ์์ฑ ์ด๋ฆ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ ์์ ํ ์ง๊ตํฉ๋๋ค.
๋๋ ์๋
๋์ ์ด ์ฃผ์ฅ์ ๋ํด ๋น์ ์ ์
์ฅ์ ๋ณํธํด ์์ง๋ง ์ง๊ธ์ ์ด๊ฒ์ด ๊ฐ์น๊ฐ ์๋ ๋ง์ฐฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์์ ์๋ฌด๊ฒ๋ ์ป์ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ด class
๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ์ ๊ตฌ์กฐํ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
๋น์ฉ๊ณผ ํจ๊ป ์๋ํ์ง ์๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ๋ถ์ ์ ์ธ ์ํฅ์ด ์์ต๋๋ค. ๋ชจ๋๊ฐ React๋ฅผ ๋ฐฐ์ธ ๋ ๊ทธ๊ฒ์ ๋ํด ๋ถํํฉ๋๋ค. ๋๋ ์ด ๊ฒฝ์ฐ์ ์ฌ๋๋ค์ด ๊ธฐ๋ํ๋ ๋ฐ๋ฅผ ํํ๋ ๊ฒ์ด ํํ์ ์ธ ๊ฒ๋ณด๋ค ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์จ๋ ๋ค๋ฅธ DOM์ ๋ณ๊ฒฝํ๊ณ ์์ผ๋ฏ๋ก ํจ๊ป ์ผ๊ด ์ฒ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
React Fire๊ฐ ๋น ๋ฅด๊ฒ ํ์ค๋ฅด๋ ํ.... ๐
์ด๋ฌํ ๋ณํ๋ ๋ชจ๋ ํ์์ ์
๋๋ค. ๋๋ ์ด๊ฒ๊ณผ react-testing-library
์ ๋ํ ์๋ฏธ์ ๋ํด ๋งค์ฐ ํฅ๋ถ๋ฉ๋๋ค. ํนํ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ ๋ฃจํธ์ ๋ฐ์ธ๋ฉ๋์ด(๋๋ ์ต์ ํ๊ฒฝ์์ ๋ ์ด์ ํ์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ์์์ ์์ ํ ์ญ์ ํ ์๋ ์์ต๋๊น?), ์ ์ฌ์ ์ผ๋ก ํฉ์ฑ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐ/์ฌ์์ฑํ๊ณ , onChange
-> onInput
๋ react-testing-library
์ ๊ตฌํ๊ณผ ๋๊ตฌ ์ฌ์ฉ ๊ฒฝํ์ ์ฌ๊ฐํ๊ฒ ๊ฐ์ ํ ๊ฒ์
๋๋ค.
๊ตฌํ๋๋ ๋์ ์ด์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค.
ํ๋ ํ๊ฒฝ์์๋ ๋ ์ด์ ํ์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ์์์ ์์ ํ ์ญ์ ํ ์๋ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๊ณ ๋ คํ์ง๋ง ์ด๊ฒ์ด ์ง๋์น ๋จ์ํ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฒคํธ ์์์ ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋ ๋์์ ๋ชจ๋ ๋ ธ๋์ ๋ํด ๋ง์ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํ์ง ์์๋ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํธ ์ ๊ตํํฉ๋๋ค. ์ด๋ฌํ ์ธก๋ฉด์ ๋ฌด์ํด์๋ ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์์ ๋ ๋ง์ ๋ฒค์น๋งํน์ด ์ํ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
@tannerlinsley ({ class: className }) => <div class={className} />
๋ถํํ๋ ์ด๊ฒ์ jsx 2.0 ๊ฐ์ฒด ์ฝ์ ํ๊ธฐ๋ฒ( <div class />
)์ ์ฃฝ์ผ ๊ฒ์
๋๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋ ๊ฒ์
๋๋ค ...
class
๊ฐ ๋ง์นจ๋ด ๋ฌธ์์ด ์์ ๊ฐ์ฒด์ ๋ฐฐ์ด btw๋ฅผ ์ทจํ ์ ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์
๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ ์ถ์์ ๋ํ ๋ชฉํ๊ฐ ์์ต๋๊น?
React DOM์ 1/3์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ณผ ๊ฒ์ด๋ค. ์ฃ๋ถ๋ฆฌ ๋ง์๋๋ฆฌ๊ธฐ๋ ์ด๋ ต์ง๋ง ์ต์ ์ ๋คํ๊ฒ ์ต๋๋ค.
์์ฐ, ์ด๊ฒ์ ์ฌ๋๋ค์ด React ๋จ์ ์ ๋ํด ์ง๋ฌธํ ๋ ์ธ๊ธํ๋ ๊ฑฐ์ ๋ชจ๋ ๋์์ธ ๊ฒฐ์ ์ ์ด๊ฑฐํ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ด ๊ฐ๊ณ ์๋ ๋ฐฉํฅ์ ์ฌ๋ํ์ญ์์ค.
className
๋ฅผ ์ฌ์ฉํ๊ณ ์ฌ๋ฌ ๋ฒ์ ์ React๋ฅผ ์ง์ํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์
๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ ๋ฌด์์
๋๊น?
@gaearon ์ค๋์ "props๋ HTML ์์ฑ์ด ์๋ DOM ์์ฑ"์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด์ "className์ ์ ์ธํ๊ณ HTML ์ด๋ฆ์ ๋๋ค"๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋๋ ๋ํ SVG๋ฅผ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐํ ์ ์๊ณ , React์ ์์ฑ๊ณผ ์ผ์น์ํค๊ธฐ ์ํด 10๋ถ ๋์ ์์ฑ์ ์ด์ง๋ฝํ์ง ์๊ณ ์ถ์ต๋๋ค.
htmlFor
๋ ์ด๋ป์ต๋๊น?
className
-> class
์ ํ์ ์๋ง๋ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ ๋งค์ฐ ์ ์คํ๊ฒ ์ด๋ฃจ์ด์ ธ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฑฐ์ ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ฏ๋ก ์ํ๊ณ์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์ฝ๋๋ฅผ "์์ "ํ๊ณ codemod๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ ๊ด์ฐฎ์ง๋ง ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ ์ ์ง ๊ด๋ฆฌ์์ ์๋น์ ๋ฐ๋ฆ
๋๋ค.
๋๋จธ์ง ๋ณ๊ฒฝ ์ฌํญ์ ์ํ๊ณ ๊ด์ ์์ ๋ณผ ๋ ์๋์ ์ผ๋ก ์ํ์ด ๋ฎ์ ๋ณด์ด์ง๋ง className
๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ์ค์ ๋ก ๋ง์ ๊ณ ํต์ ์ผ๊ธฐํฉ๋๋ค. ๊ทธ๊ฑด ๋ณ๋์ ํธ๋ก ๋๋์ด์ ๋๋จธ์ง ๐ฅ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๋ค๋ฅธ ์ผ์ ์ผ๋ก ๊ณต๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
@felixfbecker๋ ๋ง์์ ๋์ํฉ๋๋ค.
๋ชจ๋ ๊ฒ์ด ํ๋ฅญํ๊ฒ ๋ค๋ฆฌ๊ณ ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ํ์ง์ด ํฅ์๋์ง๋ง className์ ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋ชจ๋ ์์ฑ์ ๋ถํดํ ์๋ ์์ง๋ง ํด๋์ค๊ฐ ํค์๋์ด๊ธฐ ๋๋ฌธ์ className์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ๋ณด๋ค ์ ์ฌ์ฉ์์๊ฒ ๋ ๋ง์ ํผ๋์ ์ผ์ผํค๊ณ ์ค๋ช
ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค(์์ด ๋ค๋ฅด๊ฒ ์ง์ ๋์ด ์ค์๊ฐ ๋ฐ์ํ์ ๋ ๋ช
ํํ๊ฒ ๋ณผ ์ ์์). . ํด์ฒด์์ ํด๋์ค๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด rest ์์ฑ์ ์ฌ์ฉํด์ผ ํ ๋๊น์ง๋ง ์๋ํ๋ ํน์ ์์ฑ์ ์ฝ๋ ์์ ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด๋ ์๋ก์ด ๊ตฌ๋ฌธ์ ๋์
ํด์ผ ํฉ๋๋ค.
4๋ช
์ ์บ๋ฆญํฐ๋ฅผ ๊ตฌํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
@felixfbecker JSX ์์๋ class
/ for
, JS ๋ฒ์ ์์๋ className
/ htmlFor
์ ์์ต๋๊น?
<label class="foo" for="bar">..</label>
๋ ๊ฒ์ด๋ค
React.createElement('label', {className: 'foo', htmlFor: 'bar'}, '..')
์ข์ ๊ณํ! ๋ฐ๊ฐ์์! ๐๐๐
์ด๊ฒ์ ๊ต์ฅํฉ๋๋ค. ๋๋ ์๋ก์ด ๊ฒ์ ํ๊ณ ๋ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
์ด๋ฒคํธ ์์คํ ์ ๋ํญ ๊ฐ์ํํฉ๋๋ค(#4751).
์ด์ React๋ ReactDOM ์ ์๋ฅผ ํ์ฅํ์ง ์๊ณ ์ฌ์ฉ์ ์ ์ ์์์ ํธ๋ค๋ฌ๋ฅผ ์์ํ ์ ์์ต๋๋ค. https://github.com/facebook/react/issues/9242
์ด๋ React๊ฐ <x-component onMyEvent={ev => {...}} />
์ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ์์์ ๋ํด ์ฌ์ฉ์ ์ ์ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
@gaearon
์ด์ ๋ํ ๊ณํ์ด ์์ผ์ ๊ฐ์?
์ด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํ๋ฅญํ์ง๋ง ๊ฐ์ฅ ํฐ ๋ฉํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์๊ฐ์ ํฌ๊ธฐ ๊ฐ์์ ๋๋ค. React๋ ํ๊ท DX๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ํ๊ท ๋คํธ์ํฌ, ํนํ ๋ชจ๋ฐ์ผ์์ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋ ์ ๋๋ก ๋ฑ๋ฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ง ์ ์์ต๋๋ค!
์ด๋ฒคํธ ์์์ ๋ค์ ์์ฑํ๋ฉด #1254 ์์ ์ ๋ฌธ์ ์ฝ๋๋ค. ์ผ๋ถ ์ด๋ฒคํธ๋ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ฑ๋ฅ์ ์ ํ์ํต๋๋ค(React์ ๊ฒฝ์ฐ ์ ์ฒด ์ฑ์ ์๋ฏธํจ).
๋ํ ์ฅ๊ธฐ์ ์ผ๋ก ํฉ์ฑ dataSet ์ํ์ ๊ณ ๋ คํ ์ ์ด ์์ต๋๊น? (data-* ๋๋ฌธ์) ํ์ฉ๋๋ HTML props๋ฅผ ์ ๋ ฅํ ์ ์์ผ๋ฉด props๋ฅผ DOM ๋ ธ๋๋ก ์ ๋ฌํ ๋ ์๋ง์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ์ฌ ์ ํ์ด ์ง์ ๋ React ๊ตฌ์ฑ ์์๋ props์ ์ ํํ ์ ํ๊ณผ ๋ฐ์ดํฐ ์์ฑ ํ์ฉ ์ค์์ ์ ํํด์ผ ํฉ๋๋ค.
๋๋ ์ ์ด ๋๋ค
@ryanflorence ์ฝ๊ฐ ์คํํ์ด์ง๋ง (๋ด๊ฐ ์๋ ํ) ์๋ฌด๋ HTML์ ๋งคํํ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ผ๋ก React๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด html/css/svg -> jsx ํธ๋์คํฌ๋จธ๋ฅผ ๋ง๋ค ์๊ฐ์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ค์ ์ฌํ ์ผ์ ๋๋ค. React props์ ๋ํ ์์ฑ. ๋๋ถ๋ถ ์ฐพ๊ธฐ ๋ฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๋ญ๋น๋์์ต๋๋ค.:(
๋์ผํ ๋ฌธ์ (๋ฐ ์ฃผ์)์์ ๋ค์์ ๋ณด๋ ๊ฒ์ ๋งค์ฐ ์ด์ํฉ๋๋ค.
์ฐ๋ฆฌ์ ๋ชฉํ๋ React๊ฐ DOM ์๋ ๋ฐฉ์์ ๋ ์ ๋ง๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค.
ํด๋์ค๋ช โ ํด๋์ค
์ฌ์ ํ clipPath, htmlFor, tabIndex ๋ฑ์ ์ํํ๋ ๊ฒ์ด ์ด์ํด ๋ณด์ ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด DOM API์ ์ง์ ์ ์ธ ๋์๋ฌผ์ผ ๋
๊ทธ๋ฆฌ๊ณ ์ด ์ธ์๋ ์์ง์ ํต๊ณผํ์ง ์์ต๋๋ค.
๋๋ ์๋ ๋์ ์ด ์ฃผ์ฅ์ ๋ํด ๋น์ ์ ์ ์ฅ์ ๋ณํธํด ์์ง๋ง ์ง๊ธ์ ์ด๊ฒ์ด ๊ฐ์น๊ฐ ์๋ ๋ง์ฐฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์์ ์๋ฌด๊ฒ๋ ์ป์ ์ ์์ต๋๋ค. ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ ์ธ์๋ ๋ถ์ ์ ์ธ ์ํฅ์ด ์์ต๋๋ค.
React๋ ํญ์ JS ์์ ์๋ ๋งค์ฐ ์์ ๋ ์ด์ด์์ต๋๋ค. ๋ฐ๋ผ์ JSX์ ๊บพ์ ๊ดํธ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ JS์๊ณ _๊ทธ๋ฆฌ๊ณ _ DOM API์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ DOM API( className , clipPath , htmlFor , tabIndex ๋ฑ ๋ฑ)์ ๋ํ ์ง์ ์ ์ธ ๋์์ด ์์์ต๋๋ค.
class
๋์
๊ฒฐ์ ์ผ๋ก React๋ ๋ ์ด์ ์์ ๊ณ์ธต์ด ๋์ง ์๊ณ ( class
๋ JS์์ ์์ฝ์ด์) DOM API์ ๋ ๋ง์ด ํธํ๋๋ค๋ ์ ์ธ๋ ๋ชฉํ์์ ๋ฒ์ด๋ฌ์ต๋๋ค.
DOM๊ณผ ์ผ์นํ์ง _๋ฐ_ className
-> class
๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ์ฌ DOM๊ณผ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ "onChange์์ onInput์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
"์ ๋ชจ๋ ์ํ๋ค๋ ์ฌ์ค์ ํนํ ์ถฉ๊ฒฉ์ ์
๋๋ค.
๋ํ ์ฌ๋๋ค์ด ๋ค๋ฅธ ๋ถํ์ ๋ํ ๋ณ๊ฒฝ์ ์๊ตฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์(๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ์๊ตฌํ๊ณ ์๊ธฐ ๋๋ฌธ์) ์์ ์ ์ฒด ์บ์ ์ฝ๋๋ค. ์ฃผ์์์: data-*
dataset
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? data-*
๊ฐ ์ ํจํ JS๊ฐ ์๋๊ธฐ ๋๋ฌธ์( class
์ ๋น์ทํจ) DOM API ์ ์ผ๊ด๋๊ธฐ ๋๋ฌธ์ผ๊น์? htmlFor
๋ฅผ ๋ฐ๊พธ์ง ์๊ฒ ์ต๋๊น? for
๋ ์์ฝ์ด์ด๊ณ htmlFor
๋ DOM API์ ์๊ธฐ ๋๋ฌธ์? ๋ฑ ๋ฑ ๋ฑ
๊ทธ๋ฌ๋ ์๋ ค์ง์ง ์์ ํค/๊ฐ ์์ ์ ๋ฌํ๋ฉด React 16 ์ดํ ์์ฑ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
@gaearon ์ React๊ฐ CustomElements Everywhere ์ํธ ์ด์ฉ์ฑ ํ
์คํธ์์ ๋์ ์ ์๋ฅผ ๋ฐ์ ์ ์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค. https://custom-elements-everywhere.com/
๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ ์์ฒญํ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค: https://github.com/facebook/react/issues/11347 , https://github.com/facebook/react/issues/7249 , https://github.com/facebook /๋ฐ์/๋ฌธ์ /9230
์ด๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์๋ ์์ง๋ง React Fire์ React Fiber์ ์ ์ฌ์ฑ์ ์์ด๊ฐ ๋ชจ๊ตญ์ด๊ฐ ์๋ ์ฌ๋๋ค์๊ฒ ํผ๋์ ์ค๊น์? ๋๋ ์ข ์ข Newark Penn Station๊ณผ New York Penn Station์ด ์ฌ๊ธฐ NYC์์ ๊ฐ์ ๊ธฐ์ฐจ ๋ ธ์ ์ ์๋ค๋ ๊ฒ์ด ๊ด๊ด๊ฐ๋ค์๊ฒ ํนํ ์์ธํ ๋๋ด์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ ๋ง ์ฐ๋ ค๋๋ ์ผ์ด๋ผ๋ฉด React Flame์ด๋ผ๊ณ ํ๊ณ ์ฌ์ ํ ๋ถ ๐ฅ ์ด๋ชจํฐ์ฝ์ ์ ์งํ ์ ์์ต๋๋ค.
์ด๋ฒคํธ ์์์ ๋ค์ ์์ฑํ๋ฉด #1254 ์์ ์ ๋ฌธ์ ์ฝ๋๋ค. ์ผ๋ถ ์ด๋ฒคํธ๋ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ฑ๋ฅ์ ์ ํ์ํต๋๋ค(React์ ๊ฒฝ์ฐ ์ ์ฒด ์ฑ์ ์๋ฏธํจ).
์ด๋ค ํํ๋ก๋ #1254๋ฅผ ์์ ํ๋ ๊ฒ์ ํ์คํ ๋ด๊ฐ ๋ณด๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
๋ํ ์ฅ๊ธฐ์ ์ผ๋ก ํฉ์ฑ dataSet ์ํ์ ๊ณ ๋ คํ ์ ์ด ์์ต๋๊น?
๋ ํฐ ํ๋ฉด์ด ์๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ์ด์ ๊ฐ์ ์ผ์ ํ๊ณ ์ถ์ง ์์ต๋๋ค. DOM์ ์ํ ๋ ํ๋ถํ ์ธํฐํ์ด์ค( ariaSet
, dataSet
, classList
)๋ ์ดํด๊ฐ ๋์ง๋ง ๋ ๋์ ์์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๊ตํ์ฌ React DOM์ ์ผ๋ง๋ ํฌ์ํ๊ณ ์ถ์์ง๋ ๋ถ๋ช
ํ์ง ์์ต๋๋ค. ๋ ํ๋ถํ DOM API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ธํ์ ์ด์ง๋ง ํ๋ฉด์ ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ณด๋ฅํ๊ฒ ์ต๋๋ค.
๋ฆฌ์กํธ ๋ธ๋ ์ด์ง ๐ฅ
@ryanflorence ์ฝ๊ฐ ์คํํ์ด์ง๋ง (๋ด๊ฐ ์๋ ํ) ์๋ฌด๋ HTML์ ๋งคํํ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ผ๋ก React๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด html/css/svg -> jsx ํธ๋์คํฌ๋จธ๋ฅผ ๋ง๋ค ์๊ฐ์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ค์ ์ฌํ ์ผ์ ๋๋ค. React props์ ๋ํ ์์ฑ. ๋๋ถ๋ถ ์ฐพ๊ธฐ ๋ฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๋ญ๋น๋์์ต๋๋ค.:(
์๋ก์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋งค์ฐ ํฅ๋ถํ์ฌ Facebook์ ์ฌ๋ฌ๋ถ์ ์ด ๋ง์ด๊ทธ๋ ์ด์
์ผ๋ก ์ญ์ฌ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. 50k ๊ตฌ์ฑ ์์๊ฐ React Fire๋ก ๋ง์ด๊ทธ๋ ์ด์
๋ฉ๋๊น?
ํ
์คํธ ์ค์ํธ๋ ๋งค์ฐ ์๊ฒฉํด์ผ ํฉ๋๋ค. <3
React Fire์ React Fiber์ ์ ์ฌ์ฑ์ ์์ด๊ฐ ๋ชจ๊ตญ์ด๊ฐ ์๋ ์ฌ๋๋ค์๊ฒ ํผ๋์ ์ค๊น์?
๋์ฒญ์ด ์๋ ์ฌ๋๋ค(๋๋ ๋จ์ด ์ฐจ๋ณ์ ์ํฅ์ ๋ฏธ์น๋ ๋ค๋ฅธ ์กฐ๊ฑด์ ๊ฐ์ง ์ฌ๋๋ค)์๊ฒ๋ ํด๋น๋ ์ ์์ต๋๋ค.
@gaearon ๊ณต์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
Babel ๋ฐ Typescript๋ก ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ ๋ฐ์ํ๋ ๊ณต๋ฐฑ ๋ฐ ์ค ๋ฐ๊ฟ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ JSX 2.0 ๋ฆด๋ฆฌ์ค๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์ด๋ ธ๊ณ ๊ธฐ์ฌํ๋ ค๊ณ ํ์ง๋ง React ํ์ด JSX์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ๊ฒํ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฝ์ด ๋๊ฒผ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์ด์จ๋ dom๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๊ฐ jsx๋ฅผ js๋ก ๋ณํํ๋ ๋ฐฉ์์ด w3c๊ฐ ๋งํ๋ ๊ฒ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ์ ๋๋ค https://github.com/facebook/jsx/issues/19
๋ด ์๊ฒฌ์ ๋งจ ๋ง์ง๋ง์ ์์ต๋๋ค.
className
๊ด์ฐฎ์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๋ณด์. ๋ถ์์ ๋ชจ์์ ์ถ๊ฐํ์ง ๋ง์ญ์์ค.
๋๊ตฐ๊ฐ ์ด๊ฒ์ด ๊ธฐ์กด ํธ๋ค๋ฌ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ ์์ฑ์ ์ ๋ ฅ ๊ฐ ๋ฐ์ ์ค์ง
React๋ ์ฌ์ ํ ํธ๋ค๋ฌ์์ ์ ํํ event.target.value
์
๋ฐ์ดํธ๋ก ์ ์ด๋ ์
๋ ฅ์ ๊ฐ์ง ์ ์์ต๋๊น? ์๋๋ฉด ์ด๊ฒ์ด ref ๋ฐ DOM ๋
ธ๋์์ ๊ฐ์ ์ฝ๋ ๋ฐ์๋ง ์ํฅ์ ์ค๋๊น?
@nickmccurdy ๋ธ๋ผ์ฐ์ devtools์ ํ์๋๋ ๋ด์ฉ์ ์ํฅ์ ์ค๋๋ค.
@tomdale ๋ฆฌ์กํธ ์ ๋ฒ ๐ฅ
๋ฉ์ง! React 17์ ์ ์ฒด ๋ณ๊ฒฝ ์ฌํญ ๋ชฉ๋ก์ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ReactJS์ ์๋ก์ด ์๋๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๐ฅโ๏ธ
@tomdale ํ : ์์ฌ, ์ฌ์ , ์ง๋ฌผ; ๋ค๋ฅธ ์๋ฅ ๊ด๋ จ ์ฉ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น? ๐
๊ทธ๋ฌ๋ ์๋ ค์ง์ง ์์ ํค/๊ฐ ์์ ์ ๋ฌํ๋ฉด React 16 ์ดํ ์์ฑ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
@gaearon ์ React๊ฐ CustomElements Everywhere ์ํธ ์ด์ฉ์ฑ ํ ์คํธ์์ ๋์ ์ ์๋ฅผ ๋ฐ์ ์ ์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค. https://custom-elements-everywhere.com/
์๋์, ๊ทธ๊ฒ ์ด์ ๊ฐ ์๋๋๋ค(์ฌ์ฉ์ ์ ์ ์์์ ์ผ๋ฐ ์์๋ ์์ ํ ๋ณ๊ฐ์ ์ฝ๋ ๊ฒฝ๋ก์ ๋๋ค). ๊ทธ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ด์ ๋์์ ๊ฐ์ง๊ณ ์์๊ณ ์๋ก์ด ๋์์ด ๊ฒฌ๊ณ ํ์ง ์๋ ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ฐ์ฐ์ ์ผ๋ถ๋ก ๋ ๋์ ์ฌ์ฉ์ ์ง์ ์์ ์ํธ ์ด์ฉ์ฑ์ ๋ค๋ฃจ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
React Fire์ React Fiber์ ์ ์ฌ์ฑ์ ์์ด๊ฐ ๋ชจ๊ตญ์ด๊ฐ ์๋ ์ฌ๋๋ค์๊ฒ ํผ๋์ ์ค๊น์?
๋ ๋ค ๋ด๋ถ ์ฝ๋๋ช ์ด๋ฉฐ ํ๋ก์ ํธ๊ฐ ์๋ฃ๋๋ฉด ์ค์ ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. React Fire๋ React DOM์ ๋ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋ ธ๋ ฅ์ผ ๋ฟ์ด๋ฉฐ ํ๋ก๋์ ์ค๋น๊ฐ ๋๋ฉด React DOM์ผ ๊ฒ์ ๋๋ค.
React๋ ์ฌ์ ํ ํธ๋ค๋ฌ์์ ์ ํํ event.target.value ์ ๋ฐ์ดํธ๋ก ์ ์ด๋ ์ ๋ ฅ์ ๊ฐ์ง ์ ์์ต๋๊น? ์๋๋ฉด ์ด๊ฒ์ด ref ๋ฐ DOM ๋ ธ๋์์ ๊ฐ์ ์ฝ๋ ๋ฐ์๋ง ์ํฅ์ ์ค๋๊น?
์, event.target.value
๊ฐ ์์ฑ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ฑ ์
๋ฐ์ดํธ ์ค์ง์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์๋(AFAIK) ์๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ฐ์ ๋ํ CSS ์ ํ๊ธฐ์ ์์กดํ์ง ์๋ ํ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํฉ๋๋ค(์ด์จ๋ ๋์ ์ ์์).
๋ฉ์ง! React 17์ ์ ์ฒด ๋ณ๊ฒฝ ์ฌํญ ๋ชฉ๋ก์ ๋ณด๊ณ ์ถ์ต๋๋ค.
17์๊น์ง ์ค๋นํ๋ค๊ณ ์ฝ์ํ์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ธ์. 18์๋ 19์๊ฐ ๋ ์๋ ์์ต๋๋ค. ๐
React์ ๊ฐ์ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊พธ์คํ ๋ฐ์ ํ๋ ๋ชจ์ต์ ๋ณด๋ ๋ฐ๊ฐ์ต๋๋ค. ๐ class
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ฑ์ด ํจ์ฌ ๋ ์ข์์ง๋๋ค. ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
@gaearon
์ฌ์ฉ์ ์ ์ ์์์ ์ผ๋ฐ ์์๋ ์์ ํ ๋ณ๊ฐ์ ์ฝ๋ ๊ฒฝ๋ก์ ๋๋ค.
๊ทธ ์์ฒด๋ก๋ ๊ณ ์ณ์ผ ํ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์์๋ฅผ โโ๋์ผํ๊ฒ ์ทจ๊ธํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๊น? ์ด๊ฒ์ด HTML ๋ฐ DOM ์ฌ์์ ์๋์ ๋๋ค.
@justinfagnani ์ด์ ์ ๋ ผ์ํ ๋ฐ์ ๊ฐ์ด ๋น์์ ํ์ง ์์ ์ด์ ๋ ์์ฑ ๋๋ ์์ฑ์ ์ค์ ํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ท์น์ด ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์น ํ๋ซํผ์ด ํ๋กํ ํ์ ์ ์ ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ง๊ธ ์ฏค์ด๋ฉด @robdodson ์ด ์์ ํ๊ณ ์๋ RFC ๋ฐ PR์ ์ด๋ฏธ ์ผ์ข ์ ํฉ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ฉฐ, ์๋ง๋ ๊ฑฐ๊ธฐ์์ ์ ํํ ์ ์์ ๊ฒ์ ๋๋ค.
๐ ๐ฅ ๐ฅ ๐ฅ
React Fire๋ ๋ํ Inferno๊ฐ ๊ฐ์ง๊ณ ์๋ ์๋ฆฌํ ์ฑ๋ฅ ์ต์ ํ ์ค ์ผ๋ถ๋ฅผ ์ ์ฉํ ์ ์๋๋ก ํด์ผ ํ์ง๋ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์ ์ฉํ ์ ์์์ต๋๋ค. ์ ๋๋ ์๊ฐ๋ค :)
LGTM
์ ์๋ className
-> class
์ด๋ฆ ๋ฐ๊พธ๊ธฐ ๊ด๋ จ: ๋ฌธ์์ด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ classes
์์ฑ์ ์ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ตฌ์ฑ ์์์์ ๋ง์ ๋ฌธ์์ด ์กฐ์(๋๋ classnames ์ฌ์ฉ) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
classes
prop์ ์ ์ผํ ๋จ์ ์ ๋์ผํ ์์๋ก ๋์ผํ ๋ฌธ์์ด์ ํฌํจํ๋ ๋ฐฐ์ด์ด ์์ํ ๊ตฌ์ฑ ์์์์ ๋ค์ ๋ ๋๋ง๋๋ ๋ฐ๋ฉด ๋์ผํ CSS ํด๋์ค์ ๋ฌธ์์ด์ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์
๋๋ค. ์์งํ ๋งํด์, ๊ทธ๊ฒ์ ์ฌ์ํ ๋ฌธ์ ์ฒ๋ผ ๋ณด์
๋๋ค. ๋๋ถ๋ถ์ React ๊ฐ๋ฐ์๋ ์ด๋ฏธ props์์ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์ ์ฅ๋จ์ ์ ์๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@gaearon ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ํ ๊ณํ์ด ์์ต๋๊น? React Fiber์ ๋์ผํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ๊ณ ์๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ์์ง ์๊ณ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ดํธ์ ์๊ฐ์ ์ค ์ ์์ต๋๋ค.
class
๋ฐ className
๊ด๋ จ.
์ฐ๋ฆฌ๊ฐ ์ด๋ค ๊ธธ์ ๊ฐ๋ ์ด ๋ฌธ์ ์ ๋ํด ํญ๋์ ๋์๋ฅผ ์ป์ง ๋ชปํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๋๋ค. ์ฌ๋๋ค์ ์ด๊ฒ์ ๋ํด ์ ๋ง ๊ฐํ ์๊ฒฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋์์ด ๋์์ผ๋ฉด ํ๋ ๋ง์์ผ๋ก ์ ์๊ฐ์ ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
React๊ฐ "JavaScript์ ์ผ์น"ํ๋ฏ๋ก className
๊ฐ ์ ํธ๋๋ค๋ ๊ณตํต๋ ์ฃผ์ฅ์ด ์์ต๋๋ค. ์ด ์ฃผ์ฅ์ ๋ฏธ๋ฌํ๊ฒ ์คํด๊ฐ ์๋ ๊ฒ ๊ฐ์์ ์กฐ๊ธ ์ง์คํด์ ๋ง์๋๋ฆฌ๊ณ ์ ํฉ๋๋ค.
React์์ ์ฐ๋ฆฌ๋ ๋ฌด์๋ณด๋ค๋ React ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ด์ฉ์ ์ธ JavaScript์ฒ๋ผ ๋๊ปด์ ธ์ผ ํ๋ค๋ ์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์
๋๋ค. ์ฆ, ๊ฐ์์ <Table>
๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋น props๊ฐ camelCase๊ฐ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
<Table
rowHeight={10}
headerBorderInset={5}
renderRow={this.renderRow}
/>
๊ตฌ์ฑ ์์์ ๊ณต๊ฐ API ์์ row_height
๋๋ row-height
์ ๊ฐ์ ์ํ ์ด๋ฆ์ ๋ณผ ๊ฒ์ผ๋ก ์์ํ์ง ์์ต๋๋ค. Component์ props๋ ("option bag"๊ณผ ๊ฐ์) ๊ฐ์ฒด์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์ต์
์ด camelCase
๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด๊ฒ์ DOM์์ ํญ์ ๊ด์ฉ์ ์ธ ๊ฒ์ ์๋์ง๋ง DOM์ ๋ง์ ๊ณณ์์ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. React๋ camelCase
๋ฅผ ์๋์ ์ผ๋ก ์ฌ์ฉํ๋ JavaScript ์ํ๊ณ์ ์ผ์นํฉ๋๋ค.
๊ทธ๋ฌ๋ DOM์ ์ด๋ป์ต๋๊น? ์ด๊ฒ์ ๊ฐ์๊ฐ๋๋ ๊ณณ์ ๋๋ค.
DOM์๋ ์์ฑ๊ณผ ์์ฑ์ด ์์ต๋๋ค. ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก HTML์์ ๋ณผ ์ ์๋ ๊ฒ์ ๋๋ค. ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก JS์์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ์ ์ ์ผ๋ก DOM API๋ ์์ฑ์ ์ค์ ํ๊ณ ์์ฑ์ ์ค์ ํ๊ธฐ ์ํด ์กด์ฌํ๋ฉฐ ํญ์ ๊ฐ์ ๊ฒ์ ์ค์ ํ์ง๋ ์์ต๋๋ค.
node.value = 10; // setting a property
node.setAttribute('value', '10'); // setting an attribute
๋ง์ ๊ฒฝ์ฐ์ ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ React(๋ ๋ชจ๋์ ๋ํด ํ๋์ ์ถ์ํ๊ฐ ์์)๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐํ ์ ์๋ ๋ฐฉ์์ด ์๋ ์๋ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์คํด๋ React๊ฐ ํ์ฌ ๋๋ถ๋ถ์ DOM props์ ๋ํด camelCase
๊ท์น์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ React๊ฐ DOM ์์ฑ์ ์ค์ ํ๊ณ ์์์ ์๋ฏธํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์๋ชป๋ ๊ฒ์
๋๋ค.
์ฌ์ค React๋ ํ์ฌ ์ง์ํ๋ ๊ฑฐ์ ๋ชจ๋ props์ ์์ฑ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ value
์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค(๋ด๊ฐ ๋
ผ์ํ ๋๋ก ๋๋๋ฆฌ๊ธฐ๋ฅผ ์ํจ). ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ง์๋๋ ์์ฑ ๋ชฉ๋ก์ React ๋ฒ๋ค์ ํฌํจํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค์ ๋ก ํ๋ฅญํฉ๋๋ค. ํ๋ ์๋์์ ์์ฑ์ ์ฌ์ฉํจ์ผ๋ก์จ React 16์์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ์์ ์ React๊ฐ ๋ด๋ถ์ ์ผ๋ก ์์ฑ์ ์ฌ์ฉํ๋์ง ์์ฑ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ ์ด๋ฉฐ React DOM ์์ _API_๊ฐ ์์ฑ ์ด๋ฆ, ์์ฑ ์ด๋ฆ ๋๋ ๊ธฐํ ์๋ฏธ ์๋ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋์ง ์ฌ๋ถ์๋ ์๋ฌด ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
์ข์ต๋๋ค. ์์ฑ๊ณผ ์์ฑ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋๋ค. ๊ทธ๋ฌ๋ "JavaScript์ฉ"์ผ๋ก ํน๋ณํ ์ ์๋ DOM ์์ฑ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํ์คํํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด๊ฒ์ด ์ค๋๋ React API๊ฐ ์ค๊ณ๋ ๋ฐฉ์์ด ์๋๋๊น?
๊ธ์์. ์๋์ ์ด๊ฑฐ๋ props ์ค ํ๋๋ง ์ค์ DOM ๊ฐ์ฒด ์์ฑ์ ํด๋นํฉ๋๋ค.
<div
tabIndex={1}
data-id="123"
aria-live="polite"
nopin="nopin"
itemType="http://schema.org/Movie"
onClick={function() { alert('hi') }}
/>
์์ด๋ฌ๋ํ๊ฒ๋ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ค์ DOM ์์ฑ์ด ์๋ ์์ ์ ์ผํ prop(ํ์คํ์ง ์์ ๊ฒฝ์ฐ tabIndex
)์ ์ค์ ๋ก React์ ์ํด ์์ฑ์ผ๋ก ์ค์ ๋ฉ๋๋ค!
๋ฐ๋ผ์ ์ด ์์ ์์ ์๋ง๋ ๋ช
ํํ์ง๋ ์๊ณ ์ผ๊ด๋์ง๋ ์๋ค๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์
๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์์ฑ์ด ์กด์ฌํ์ง ์์ต๋๋ค(์: ์ฌ์ฉ์ ์ ์, ๋นํ์ค ์์ฑ). ์ด๋ค ๊ฒฝ์ฐ์๋ React๊ฐ ๋ ํ๋ถํ API( data-
vs dataSet
)๋ฅผ ์ ๊ณตํ ์ ์์ง๋ง ํ์ฌ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ์ ์ React ๊ตฌ์ฑ ์์์ ๋ ์ ํฉํ๊ธฐ ๋๋ฌธ์ React๊ฐ ์๋์ ์ผ๋ก ํธ์ฐจ๋ฅผ ์ ํํฉ๋๋ค( React์ onClick
๋ onclick
DOM ์์ฑ). ์ด๋ React ๊ตฌ์ฑ ์์๊ฐ ์ข
์ข
onItemClick
์ ๊ฐ์ ๋ ๋ณต์กํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋
ธ์ถํ๊ธฐ ๋๋ฌธ์
๋๋ค. <Button onclick>
ํ์ง๋ง <Table onItemClick>
๋ผ๊ณ ์ด๋ค๋ฉด ๋งค์ฐ ์ผ๊ด์ฑ์ด ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ <Table onitemclick>
๋ ์ปดํฌ๋ํธ API์์ ํผํ๊ณ ์ถ์๋ camelCase๊ฐ ์๋๋๋ค.
์์์ ๋๋ React๊ฐ ์ด๋ฏธ "ํญ์ DOM ์์ฑ ์ด๋ฆ์ ์ฌ์ฉ"ํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ผ๊ด์ฑ ์ด ์๊ณ , React๊ฐ ์ค์ ๋ก ์์ฑ์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ ์๋๋ค๋ ์ (๊ทธ๋์ ๊ฒฝํ ๋ฒ์น๋ ์ค์ ๋ฉ์ปค๋์ฆ์ ์ค๋ช ํ์ง ์์)์ ๋ํด ์ค๋ช ํ์ต๋๋ค. ๊ฒฝ์ฐ DOM ์์ฑ์ ๋จ์ํ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ์์ฑ ์ด๋ฆ์ ๊ณ์ ํ์ฉํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ฑ ์ด๋ฆ ๋ง ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด๊ฒ์ ๊ทธ๋ด๋ฏํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ๊ธฐํ ์ฒซ ๋ฒ์งธ ๊ณ ๋ ค ์ฌํญ์ ๋ถ๋ชํ๋๋ค. React ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฉ์ ์ธ JavaScript์ฒ๋ผ ๋๊ปด์ ธ์ผ ํฉ๋๋ค . ๊ทธ๋ฌ๋ ์ข ์ข ๊ตฌ์ฑ ์์๋ ๊ธฐ๋ณธ DOM ์์์ ์ต์ํ ์ผ๋ถ ์ํ์ ์ ๋ฌํฉ๋๋ค.
<Button
borderColor='red'
tabIndex={1}
/>
// renders...
<button
tabIndex={1}
/>
๋ง์ถค Button
์์ ๋๋ฌธ์๊ฐ ์ผ์นํ์ง ์๋ ์ํ์ ์๋ฝํ๋ ๊ฒ์ ์ด์ํ ๊ฒ์
๋๋ค.
<Button
borderColor='red'
tabindex={1}
/>
์ด๋ ๊ฒ ํ๋ฉด ์๋น์๊ฐ ํน์ prop์ด ์ค์ DOM prop์ธ์ง, ์๋๋ฉด ๊ตฌ์ฑ ์์ ๊ณ์ฝ์ ์ผ๋ถ์ธ์ง ํญ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ๊ทธ ๊ตฌ๋ถ์กฐ์ฐจ ๋ชจํธํฉ๋๋ค. ๊ตฌ์ฑ ์์๋ ๋จผ์ ํน์ ์ํ์ ํต๊ณผํ๋๋ก ์ ํํ ์ ์์ง๋ง ์ค์ ๋ก๋ ์ถ๊ฐ ๋ ผ๋ฆฌ์ ์ฌ์ฉํ๊ธฐ ์์ํ ์ ์์ต๋๋ค. "DOM props"์ "other props"์ ๊ฒฝ๊ณ๋ฅผ ์ด๋์ ๋๋์?
์ด๊ฒ์ด tabIndex
, cellSpacing
์ ๊ฐ์ props ๋ฐ ๋๋ถ๋ถ์ ๋ค๋ฅธ DOM ๊ด๋ จ props๊ฐ camelCase ๊ท์น์ ๋ฐ๋ฅด๋ ๊ฒ์ด ๋ฐ๋์งํ ์ฃผ๋ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ปดํฌ๋ํธ API๋ก ๋๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฐ๋ฆฌ๋ Button
์ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์๊ฐ DOM์ผ๋ก ํ๋ฌ ๋ค์ด๊ฐ๋ ์ง์ ์์ ์์ฑ ์ด๋ฆ์ผ๋ก "๋ณํ"ํ์ง ์๊ณ , ๊ทธ๋ฆฌ๊ณ non-camelCase ์ํ์ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์ API.
์ด๊ฒ์ ๋ํ data-*
, aria-*
๋ฐ ์ฌ์ฉ์ ์ ์ ์์ฑ๊ณผ ๊ฐ์ ์ํ์ด ํฉ๋ฆฌ์ ์ธ ์์ธ์ธ ์ด์ ๋ฅผ ์ค๋ช
ํฉ๋๋ค(๋น๋ก ๋ ํ๋ถํ API๋ฅผ ๋ง๋ค ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ). ์ฌ์ฉ์ ์ง์ ๊ตฌ์ฑ ์์์ ๊ฑฐ์ ์ ๋ฌ๋์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก DOM์ ๋๋ฌด ๊ฒฐํฉ๋์ด ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์์์ ์ ์ฉํ์ง ์์ต๋๋ค. ๋์ ๋ ํ๋ถํ camelCase API๋ฅผ ์ฌ์ฉํ์ฌ <Modal>
๋๋ <Button>
์ ๊ฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด ๋ฉ๋๋ค.
"DOM ์์ฑ ์ด๋ฆ" ๊ท์น์ด ์๋ํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒ์ด ํ์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ฌด์์ ๋๊น? "์์ฑ ์ด๋ฆ์ camelCase ๋ฒ์ "์ด ๋ ์ ์์ต๋๊น? ์ด๊ฒ์ ๊ฑฐ์ ํญ์ ์ด๋ฏธ ์ฒดํฌ ์์๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ๋๋ฌด ๊ธ์ง์ ์ผ๋ก ๋ค๋ฆฐ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ด๊ฒ์ ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ญ์์ค. ์ฐ๋ฆฌ๋ srcSet
๋ผ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. ๊ทธ๋ฌ๋ DOM ์์ฑ ์ด๋ฆ์ srcset
์
๋๋ค. autoCapitalize
๊ฐ ์์ง๋ง DOM ์์ฑ์ autocapitalize
์
๋๋ค. autoFocus
๊ฐ ์์ง๋ง DOM ์์ฑ์ autofocus
์
๋๋ค.
camelCase JavaScript ๊ท์น๊ณผ ์ผ์นํ์ง ์์ ๋ ์ด๋ฏธ DOM ์์ฑ ์ด๋ฆ์์ ๋ฒ์ด๋๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๋ฅผ class
๋ง๋ญ๋๋ค.
className
๋ class
className
๋ก ๋ง๋ ์ด์ ์ค ์ผ๋ถ๋ React๊ฐ DOM ์์ฑ์ ์ค์ ํ๊ณ className
๊ฐ DOM ์์ฑ์ ์ด๋ฆ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ ์์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ React๋ 3~4๊ฐ์ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ ์ด์ ์์ฑ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ ์ค์ํ ๊ฒ์ React๋ DOM ์์ฑ ์ด๋ฆ์ ์ผ๊ด๋๊ฒ ์ฌ์ฉํ์ง๋ ์์ต๋๋ค. ๋์ DOM ์์ฑ๊ณผ ์์ฑ ์ด๋ฆ์ ๋ด๋ถ ๋ช
๋ช
๋ถ์ผ์น์ ๊ด๊ณ์์ด JavaScript์์ ์ฌ์ฉํ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ณด์ด๋ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. React๋ ์ปค์คํ
์ปดํฌ๋ํธ์ prop ์ด๋ฆ์ "JavaScripty"๋ก ๋๋ผ๋๋ก ์ ์งํ๋ ๋ฐ ๊ฐ์ฅ ์ ๊ฒฝ์ ์ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฐ ์๋ฏธ์์ tabindex
๋ "JavaScripty"๊ฐ ์๋์ง๋ง class
์ className
๋ ๋ชจ๋ "JavaScripty"์
๋๋ค.
์ด๊ธฐ์ class
์ ๋ํ ๋ ๋ค๋ฅธ ์ฃผ์ฅ์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์ ํจํ ES3(IE8๊ณผ ๊ด๋ จ๋จ)๊ฐ ์๋๋ผ๋ ๊ฒ์
๋๋ค.
// Not valid in ES3
// Valid in ES5
var props = { class: 'foo' };
๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๋ ์ด์ ES3๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. Babel๊ณผ ๊ฐ์ ๋๊ตฌ ๋ชจ์์ ์ฌ์ฉํ๊ฑฐ๋ IE9+๋ฅผ ๋์์ผ๋ก ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. React๋ ํ์ฌ IE8์ ์ง์ํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ class
์ ๋จ์ ์๋ ์ ์ผํ ๋ถํธ์ ๋ค์์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
// Not valid at all :-(
const class = props.class;
const { class } = props;
๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด ์ฃผ์ฅ์ ๊ทธ ์์ฒด๋ก ์ถฉ๋ถํ ๊ฐ๋ ฅํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. React๋ ๊ตฌ์กฐํ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ด ํน์ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์์ฑํ๋๋ก ๊ฐ์ํ์ง ์์ต๋๋ค.
// Valid
const {class: cls} = foo;
const cls = props.class;
๊ทธ ์ด์์ ๋ ธ๋ ฅ์ด ํ์ํ์ง ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ง์ ๊ตฌ์ฑ ์์์ ํ๋ ์ด์์ ๋ด๋ถ <div>
๋๋ ๊ธฐํ ํธ์คํธ ์์๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ class
๋ฅผ ์ฝ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์์ฃผ ์ ๋ฌํฉ๋๋ค. ๋ฐ๋ผ์ class
๋ฅผ ๊ตฌ์กฐํํ๋ ค๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์์ฃผ <div className>
๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ class
๋ก ๋ณ๊ฒฝํ๋ฉด ๋์
๋๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํค๋ณด๋ ์
๋ ฅ์ ์ ์ฝํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์ค์ํ ํฌ์ธํธ๊ฐ ์์ต๋๋ค.
class
๋ฅผ ์ฌ๋ฌ ์์ค์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ ๊ทธ ์์ฒด๋ก ์ข์ ํจํด์ด ์๋๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ํ์ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์์๋ ์ข
์ข
์ทจ์ฝํ ๊ตฌ์ฑ ์์๋ก ์ด์ด์ง๋๋ค. ๊ฐ๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ 100๊ฐ์ ์๋ก ๋ค๋ฅธ ํธ์ถ ์ฌ์ดํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํ์ผ์ด ํญ์ ๊นจ์ง๊ณ ์บ์ค์ผ์ด๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ class
๋ฅผ ์ฒ์๋ถํฐ ๊ตฌ์กฐํํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์ด ์ผ๋ง๋ ๊ฐ์น ์๋ ๊ฒ์ธ์ง ๋ช
ํํ์ง ์์ต๋๋ค. props์์ ์ฝ๊ธฐ ์ํด ์ฝ๋๋ฅผ ํ ์ค ๋ ์์ฑํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋๋ props.class
๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ์ง ์์๋ ๋ฉ๋๋ค).
DOM์ ๋งค์ฐ ๊ฐ๊น์ด ๊ตฌ์ฑ ์์ ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ(๋ฐ๋ผ์ class
๋ฅผ ์ํ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์) ๋ค๋ฅธ ์ํ๋ ์ ๋ฌํ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๊ตฌ์กฐํ์ ๋๋จธ์ง ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// Valid in ES2018
function Button({ color, ...rest }) {
const buttonClass = rest.class + ' Button-' + color;
return <button {...rest} class={buttonClass} />
}
์์ ํ ํ์๊ฐ ์๋ค๋ฉด class
๋ฅผ ์ฝ์ง ์๊ณ ๋ {...rest}
๋ฅผ ์ ๋ฌํ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ตฌ์กฐ ๋ถํด ์ ํ์ ๋ ๋์ ๊ตฌ์ฑ ์์ ๋์์ธ์ ์ฅ๋ คํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก class
์ className
๋ฅผ ๋ชจ๋ ์ง์ํ ์๋ ์๋์? ์ด๋ค ๋ฉด์์๋ ์ด๋ฏธ ๊ทธ๋ ๊ฒ ํ๊ณ ์์ง๋ง React๋ ๊ฒฝ๊ณ ์ ํจ๊ป ๋น์ ์๊ฒ ๊ณ ํจ์ ์ง๋ฆ
๋๋ค. ์ฌ๊ธฐ์๋ ์ด์ ๊ฐ ์์ต๋๋ค.
๊ฒฝ๊ณ ์์ด ๋ ๋ค ์ง์ํ๋ฉด ์ปค๋ฎค๋ํฐ์์ ์ด๋ ๊ฒ์ ์ฌ์ฉํ ์ง ์ชผ๊ฐ์ง๋๋ค. class prop์ ๋ฐ๋ npm์ ๊ฐ ๊ตฌ์ฑ ์์๋ ๋ ๋ค ์ ๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ์ค๊ฐ์ ํ๋์ ๊ตฌ์ฑ ์์๋ผ๋ ์๋ํ์ง ์๊ณ ํ๋์ ์ํ๋ง ๊ตฌํํ๋ฉด ํด๋์ค๊ฐ ์์ค๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋จ์ class
๋ฐ className
๊ฐ ๊ฐ๊ฐ "๋์ํ์ง ์์"์ผ๋ก ํ์๋ ์ํ์ด ์์ต๋๋ค. React๊ฐ ๊ทธ ์ถฉ๋์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ํ์ ์ ์ง๋ณด๋ค ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ด๊ฒ์ ํผํ๊ณ ์ถ์ต๋๋ค.
React๊ฐ ์ค๋๋ ์คํ ์์ค๋ผ๋ฉด class
(๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๊ฐ๋
์ ์ผ๋ก ๋ ๊ฐ๊น๊ณ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ prop์ ๋ํ ํ์ดํ์ด ์ ์)์ ํ์ฉํ๋ ์ฅ์ ์ด ๋จ์ (์ฐจ๋จํ๊ธฐ ์ํด ์ฝ๊ฐ ๋ ๋ง์ ํ์ดํ์ ํ๋ ๊ฒ)๋ณด๋ค ์ค์ํ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ด์จ๋ ์คํ๋ ๋ ์ฐ์ฐ์๋ฅผ ์ํ ๊ฒ์
๋๋ค).
์ฐ๋ฆฌ๊ฐ DOM ์์ฑ๊ณผ ์ผ์นํ์ง ์๋ ๋จ์ ์ผ๋ก ๋ณด์๋ ๊ฒ์ ๋ ์ด์ DOM ์์ฑ์ ์ค์ ํ์ง๋ ์๊ณ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๊ณ ๋
ธ๋ ฅํ์ง๋ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํฉ๋๋ค. ๋์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ฑฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์๋ React ๊ตฌ์ฑ ์์์ ์๋น ์ธก์์ ์์ฑ ๊ธฐ๋ฐ์ด์ง๋ง camelCase API๋ฅผ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ class="Button"
๊ฐ className="Button"
๋ณด๋ค ํ์คํ ๋ ํธ๋ฆฌํฉ๋๋ค. ์ฌ์ค DOM API๊ฐ ์ค๋๋ ์ค๊ณ๋์๋ค๋ฉด .class
์์ฑ์ ์ค์ ํ ์ ์์ ๊ฒ์
๋๋ค. ๊ฑฐ์ 10๋
์ ์ ์ด์ ๊ฐ์ ํ ๋น์์ class
์ฌ์ฉ์ ๋ํ ์ ํ์ด ES5์์ ํด์ ๋์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ ์ผํ๊ฒ ๋จ์ ํฐ ๋จ์ ์ ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ ์คํ๊ฒ ํ๊ฐํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ ๋ณ๊ฒฝ์ ํ๊ณ ์๋ค๋ฉด ์ด๊ฒ ์ญ์ ๋ง๋ค๊ณ ์์ํ ๊ณ ์น ์ ์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๊ฐ๋ณ๊ฒ ์๊ฐํ์ง ์์ผ๋ฉฐ ๊ทํ์ ๋ชจ๋ ์ฐ๋ ค ์ฌํญ์ ๊ณ ๋ คํฉ๋๋ค.
์ฐธ๊ณ : ์ด๊ฒ์ camelCased ์์ฑ ์ด๋ฆ๊ณผ ์ผ์นํ์ง ์๋ ๋ค๋ฅธ React prop ์ด๋ฆ์ ๋ํด ์ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
@renatoagds
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ํ ๊ณํ์ด ์์ต๋๊น? React Fiber์ ๋์ผํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ๊ณ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ดํธ์ ์๊ฐ์ ํ ์ ํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ธ๊ธํ๋ฏ์ด :
๊ทธ๋ฆฌ๊ณ Facebook์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ๋ํด ์ ์งํ๊ฒ ์ค๋ช ํ ์ ์๋ 50,000๊ฐ ์ด์์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๋ช ๊ฐ์ง ๋์ ์์ ๋๋ ์๋ํ๋ ์ฝ๋ ๋ชจ๋๋ฅผ ์ ์ธํ๊ณ ๋ ์ ํ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ ์ฌ์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ธ์ ๋์ฒ๋ผ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ์ต๋ํ ์ํํ๊ฒ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๋งค๋๋ฝ์ง ์์ผ๋ฉด ์ค์ค๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
re: className -> class, ์ด๋ค ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ด์ฐฎ์ต๋๋ค. ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ํ ํด๋์ค ๋ณ๊ฒฝ ์์ธ์ ๋ ์งง์ ์ฝ๋ ์ค์ ๋ถ์์ ์ด์ ์ ํ์คํ ์ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๋ค๋ฅธ camelCase ์ด๋ฆ์ ๋ํด ์์์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ํด๋์ค์ ๋จ์ ์ ์ผํ ๋ถํธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
const { class } = props;
๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด ์ฃผ์ฅ์ ๊ทธ ์์ฒด๋ก ์ถฉ๋ถํ ๊ฐ๋ ฅํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. React๋ > ๊ตฌ์กฐํ ๋ฐ ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ์ง ์์ต๋๋ค.
const class = props.class;
๊ทธ ์ด์์ ๋ ธ๋ ฅ์ด ์๋๋ค.
๋ ๊ฐ์ง(์์ ์๋ ์์):
const class = props.class
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ํจํ์ง ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์๊ณ ๋น ๋ฅธ ํ
์คํธ์์ Chrome์ ๊ทธ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๋ํ ์ด ๊ธฐ์ฌ ๋ ์ ํจํ์ง ์์์ ๋ํ๋
๋๋ค.
์ด ๋ณ๊ฒฝ ์ฌํญ์ด nvm๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ์ฌ๋๋ค์๊ฒ (๋ค์ ํ ๋ฒ, ์ ์ฌ์ ์ผ๋ก ์์) ์ข์ ์ ์์ญ์์ ์ ์ ์์ต๋๋ค(์๋ ์
๋ฐ์ดํธ ์ฐธ์กฐ).
const { oneProp, twoProp, className, ...rest } = this.props;
// do stuff with oneProp, twoProp, className
return (
<div
someProp={prop}
anotherProp={anotherProp}
className={someClassName}
{...rest}/>
);
์ด ๋ณ๊ฒฝ ํ์๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
const { oneProp, twoProp, ...rest } = this.props;
// do stuff with oneProp, twoProp, this.props.className
return (
<div
someProp={prop}
anotherProp={anotherProp}
{...rest}
class={someClassName}/>
);
์ด ๋ณ๊ฒฝ ์ฌํญ์ ํด๊ฒฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋์ง๋ง ์ด ์คํ์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ณ ์ฝ์ ๋ ์ ๋ ํด์ผ ํ ์ฌํญ์ด ์กฐ๊ธ ๋ ์์ต๋๋ค.
์ ๋ฐ์ดํธ :
์ ๊ฒฝ ์ฐ์ง ๋ง,
const { class: className } = this.props;
ํธ๋ฆญ์ ์ํํฉ๋๋ค.
์ ์ผํ๊ฒ ๋จ์ ํฐ ๋จ์ ์ ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ ์คํ๊ฒ ํ๊ฐํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ ๋ณ๊ฒฝ์ ํ๊ณ ์๋ค๋ฉด ์ด๊ฒ ์ญ์ ๋ง๋ค๊ณ ์์ํ ๊ณ ์น ์ ์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๊ฐ๋ณ๊ฒ ์๊ฐํ์ง ์์ผ๋ฉฐ ๊ทํ์ ๋ชจ๋ ์ฐ๋ ค ์ฌํญ์ ๊ณ ๋ คํฉ๋๋ค.
์ด ์ข๊ฒ๋ ์ด๊ฒ์ Aesthetic์ ๊ฐ์ CSS-in-JS ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฝ๊ฒ ์ํ๋ฉ๋๋ค. ๋๋ผ์ด ์์ฑ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์์ฑ ์ด๋ฆ์ ๊ดํ ์์์ ํ, ๋๋ ํ๋ฅญํ ํ๋ก์ ํธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. svg2jsx ๋ ํฐ SVG๋ฅผ React์์ ์ฌ์ฉํ๋๋ก ๋ณํํ๋ ๋ฐ ์ข์ต๋๋ค!
@jamesPlease ์ฃ์กํฉ๋๋ค, ๋ด ๋ง์์ด ๋น์ด ์์ต๋๋ค โ ๋น์ ๋ง์ด ๋ง์์. ์์ ๋จ.
@james ๋น์ ์ด ์ณ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ ๊ธฐ๋ณธ ๊ฐ์ ๋ํด JSON๊ณผ ์์ฃผ ์๋ํ๋ฏ๋ก ์ฑ๊ฐ์ ์ผ์ ๋๋ค!
const { default: defaultVal } = property
์ด๋ฒคํธ ์์คํ ์ ๋ณ๊ฒฝํ๋ ๋์ Inferno์ linkEvent ํจ์์ ์ ์ฌํ ๊ฒ์ ๋ณด๋ ๊ฒ์ด ์ ๋ง ์ข์ ๊ฒ์ด๋ฏ๋ก ๋ ๋๋งํ ๋๋ง๋ค ์ต๋ช ํจ์๋ฅผ ๋ง๋ค ํ์ ์์ด ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์์์ props๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
className -> class
๋ ์ํ๊ณ์ ํฐ ๋ณํ๊ฐ ๋ ๊ฒ์ด๋ฉฐ ์ ์ง ๊ด๋ฆฌ๋์ง ์์ ์๋ง์ ๊ตฌ์ฑ ์์๊ฐ ํธํ๋์ง ์์ผ๋ฉฐ ํจ์นํ์ง ๋ชปํ๋ฉด ํ ์ ์๋ ์ผ์ด ์์ต๋๋ค. ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์
๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ํธ๋ฆฌ์ ๋ ๊น์ ๊ตฌ์ฑ ์์์ ๋ํด ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋นํ์ฑํํ๋ StrictMode
์ ๊ฐ์ ๋ํผ๊ฐ ์์ต๋๊น?
์ด ๋ณ๊ฒฝ์ด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ์ฌ๋๋ค์๊ฒ (๋ค์ ํ๋ฒ, ์ ์ฌ์ ์ผ๋ก ์์) ์ข์ ์ ์์ญ์์ ์ ์ ์์ต๋๋ค.
const { oneProp, twoProp, className, ...rest } = this.props; // do stuff with oneProp, twoProp, className return ( <div className={someClassName} {...rest}/> );
๊ตฌ์กฐํํ์ง ๋ง์ญ์์ค.
const { oneProp, twoProp, ...rest } = this.props;
return (
<div
{...rest}
class={'something ' + rest.class}
/>
);
@gaearon
React๊ฐ ๋ด๋ถ์ ์ผ๋ก ์์ฑ์ ์ฌ์ฉํ๋์ง ์์ฑ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋๋ค.
๊ทธ๊ฒ๋ ์์งํ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค. DOM ์์๋ ์์ฑ์ ์ค์ ํ๋์ง ์์ฑ์ ์ค์ ํ๋์ง์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์๊ณ ๋์ํฉ๋๋ค. React๋ ๋ชจ๋ ์ฐจ์ด์ ์ ์ ์๋ ์์ง๋ง ์์ ์ฌ์ฉ์๋ ์์ ์ด ์ฌ์ฉํ๋ ์์์ ๋ํด ์ ์ ์์ต๋๋ค. ์์ฑ, ์์ฑ ๋ฐ ์ด๋ฒคํธ์ ๋ํ ๋ช ์์ ์ ์ด๋ฅผ ํตํด ์์ฑ์๋ ์ด๋ฌํ ์ํฉ์์ ๋ฒ์ด๋ ์ ์์ต๋๋ค.
@justinfagnani ๋ณ๊ฒฝ ํ์ผ๋ฉด ํ๋ ํน์ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์ ์ํ๋ API์ ๋ํด ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ ์ถํด๋ ๋ ๊น์? ์ด๊ฒ์ ์ด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ์ฝ๊ฐ ๋ฒ์ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
@sompylasar
className -> class๋ ์ํ๊ณ์ ํฐ ๋ณํ๊ฐ ๋ ๊ฒ์ด๋ฉฐ, ์ ์ง ๊ด๋ฆฌ๋์ง ์๋ ์๋ง์ ๊ตฌ์ฑ ์์๊ฐ ํธํ๋์ง ์์ ๊ฒ์ด๋ฉฐ, ํจ์นํ์ง ๋ชปํ๋ฉด ํ ์ ์๋ ์ผ์ด ์์ต๋๋ค. ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ํธ๋ฆฌ์ ๋ ๊น์ ๊ตฌ์ฑ ์์์ ๋ํด ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋นํ์ฑํํ๋ StrictMode์ ๊ฐ์ ๋ํผ๊ฐ ์์ต๋๊น?
๋์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ฐฌ๋ฐ ์๋ก ์ ์ ์ธ์งํ๊ณ ์์ต๋๋ค. ์๋ฌด๊ฒ๋ ํ์ ๋์ง ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก ์ ์ง ๊ด๋ฆฌ๋์ง ์๋ ๊ตฌ์ฑ ์์์ ๋ฌธ์ ๋ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. ์ ์์ ๋ฐ๋ผ ๋ฉ์ด์ ์์ ๋ฌด์ธ๊ฐ๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ React ๋ฉ์ด์ ๋ฆด๋ฆฌ์ค์ ๋ํ๋ฉ๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ์์ผ๋ก ๋์๊ฐ ์ ์์ผ๋ฉฐ ๋ชจ๋ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์๋ฅผ ๋ค์ด ์๋ฒ ํ๊ฒฝ๊ณผ ๋ฌ๋ฆฌ ๋ฒ๋ค์ ์์ํ). PropTypes
๊ฐ ๋ณ๋์ ํจํค์ง๋ก ์ด๋ํ ๋๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ UNSAFE_
์๋ช
์ฃผ๊ธฐ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ฉด ๋ค์ ๋ฐ์ํฉ๋๋ค. ์ ์ง ๊ด๋ฆฌ๋์ง ์์ ํจํค์ง๋ ๋ถ๊ธฐ๋๊ฑฐ๋ ํจ์น๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ํฐ ์๊ฐ ์์ค์์ ๊นจ๋ซ๊ณ , ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ 1๋
์ ํ๋ ์ด์์ ํฐ ์ ๊ณต์ ํ๋ ๊ฒ์ ํผํ๋ ์ด์ ์
๋๋ค. ๋์์ ์ค ์ฌ์ ๊ฐ ์๋ ์ฌ๋๋ค์ ๊ฒฝ์ฐ, ์ผ๋ฆฌ ์ด๋ตํฐ๊ฐ ๊ธธ์ ๋ฆ๊ณ ๋ฒ๋ ค์ง ํจํค์ง๋ฅผ ๋์ด๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๊ณต์ผ๋ก ์ฎ๊ธฐ๊ธฐ ์ ์ ๋ช ๋ฌ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ์ ๋ต์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ํจ๊ป ์์ผ๋ก ๋์๊ฐ๋๋ค.
๋ค์ ํ ๋ฒ โ ๊ทํ์ ์ฃผ์ ํจ์ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ฃผ๋ก ๊ณผ๊ฑฐ์ ๋ฐ์ํ๊ฑฐ๋ ๋ฏธ๋์ ๋ฐ์ํ ์ ์๋ ๋ค๋ฅธ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. ์ธ์ ๋์ฒ๋ผ, ์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณํํ๊ธฐ ์ํด ์คํํ ์ ์๊ณ ๋ค๋ฅธ ํจํค์ง์์๋ ์คํํ ์ ์๋ ์๋ํ๋ ์คํฌ๋ฆฝํธ์ ๋ง์ ๋ ธ๋ ฅ๊ณผ ๊ฐ์กฐ๋ฅผ ๊ฐํ ๊ฒ์ ๋๋ค(๊ทธ๋ฆฌ๊ณ PR์ ๋ณด๋ด๊ฑฐ๋ ๋ง์ง๋ง ์ํ์์ ํฌํฌ) ).
๊ฒฐ์ ์ ๊ด๊ณ์์ด class
์ ๋ํ ๋ ๋ค๋ฅธ ์ฃผ์ฅ์ ๊ฒ์ ๊ฐ๋ฅ์ฑ์
๋๋ค. JS ํด๋์ค ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ES6 ์ฝ๋์์ CSS ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฐพ๊ณ ์ ํ ๋ class
๋ก ๊ฒ์ํ๋ฉด ์คํ์ง๊ฐ ๋ช ๊ฐ๋ ๋ ๊น์? ์, class={
๋ฅผ ๊ฒ์ํ ์ ์์ง๋ง JS์์ ๊ฐ์ฒด๋ก ์์ฑ๋ JSX์ props๋ฅผ ๊ตฌ์กฐํํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? (์ ๋ props destructuring์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋ํ์ง๋ง ์ฌ์ ํ ์ฌ์ฉ ์ค์
๋๋ค.) ๋ฌผ๋ก ์ฝ๋ ํธ์ง๊ธฐ์์ ๋ ๋์ ์ปจํ
์คํธ ์ธ์ AST ๊ธฐ๋ฐ ๊ฒ์ ๋๊ตฌ๊ฐ ํ์ํ์ง๋ง ์ง๊ธ์ ํ
์คํธ์ ์ ๊ท ํํ์๋ง ์์ต๋๋ค. ๋ฌผ๋ก ์ ํ ์์คํ
์ ๊ฐ์ฒด ์ ๋ฌ์ ์ถ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ง๋ง ๋ง์ ์ธ๊ตฌ๊ฐ ์ด๋ฅผ ์ฑํํ์ง ์์์ต๋๋ค.
์์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ง๊ธ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ผ๋ ์ ์ ์ด์ธ๋ฆฌ์ง ์์ต๋๋ค. rest.class
(์๋ฅผ ๋ค์ด)๊ฐ x๋
์์ ์ธ์ด์ ์ค์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์คํ ๋งํ ์ ์์ต๋๊น?
@GeordieP ์ค๋ ์๋ํ๋ฉด ๋ด์ผ ๊นฐ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ป๊ฒ ์งํํ๊ณ ์๋์ง์ ๋ํ ํต์ฌ ์์น์ด์ ๋ง์ ํน์ง์ด ์๋ ์ด์ ์ ๋๋ค.
@gaearon ๊ทธ๋ผ ์ถฉ๋ถํฉ๋๋ค. ๊ทธ๊ฒ์ด ์ถฉ๋ถํ ํฐ ์น๋ฆฌ๋ผ๋ฉด, ๋๋ ๊ทธ๊ฒ์ ์ํด ๊ฐ๋ผ๊ณ ๋งํฉ๋๋ค.
@sompylasar ์ ๋ ์ผ๋ฐ์ ์ผ๋ก className=
๋๋ className:
๋ฅผ ๊ฒ์ํฉ๋๋ค. ์ด ๋ ๊ฐ์ง ๋ชจ๋ class
์์๋ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
className
๋ฅผ ์ ๊ฑฐํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋ง์์ฌ htmlFor
. ์ ๋ DOM ๊ฐ๋ฐ์๊ฐ ์๋๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ DOM ๋ฉ์๋์ ์ก์ธ์คํด์ผ ํ๋ ๊ฒฝ์ฐ ๋งค์ฐ ์๋ชป๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด๊ฐ React์ ์ฌ๋๋ค์ ์จ๋ณด๋ฉํ๋ ๊ฐ์ฅ ํฐ ๋์ ์ JSX๊ฐ DOM๊ณผ ๊ทธ ์ด์ํ ๋์ฒด HTML ์์ฑ์ ๋ํด ๋ง๋๋ ์ถ์ํ์
๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ณํ๋๊ณ ์์ผ๋ฏ๋ก ์ด ์์ ์์ ์์ฝ์ด์ ๋ํด ๊ฑฑ์ ํ ์ด์ ๊ฐ ์์ต๋๋ค. IMO.
์ด๊ฒ์ด ๊ธฐ์กด ํ ๋ก ์ ์๋ฌด๊ฒ๋ ์ถ๊ฐํ๊ณ ์๋์ง ํ์คํ์ง ์์ง๋ง className
๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ ๋์ ์ด์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฝ๊ฐ ์ง๊ด์ ์ด์ง ์์ ์ด๋ฆ์์ ์ด๋ณด์ React ํ์ต์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋ชจ๋ ์ฌ๋์ด ํ๋ก์ ํธ ๋ฐ ํ๋์ ์ ๋ฐ์ดํธํด์ผ ํ ๊ฐ์น๊ฐ ์์ต๋๊น?
๊ตฌ์กฐ ํด์ ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๋ ์ฌ๋์ผ๋ก์ ๊ท์น์ ๋ํ ์ด ์๋ก์ด ์์ธ๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ ๊ฒ์ ๋ด๊ฐ $# className
class
๋ผ๊ณ ์ฐ๋ ๋๋ฌธ ๊ฒฝ์ฐ๋ณด๋ค ๋ ํฐ ์ ์ ์ ๋ฌธ์ ์ผ ๊ฒ์
๋๋ค.
๋ํ ์ด๋ณด์๋ ํ์ฌ className
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ํ ์์ ์๋ฃ(๋ธ๋ก๊ทธ/๋ฆฌํฌ์งํ ๋ฆฌ ๋ฑ)์ ์ฌ์ ํ ํผ๋์ค๋ฌ์ํ์ง ์์ต๋๊น?
๋ง์ง๋ง์ผ๋ก @sompylasar ๊ฐ ๋งํ๋ฏ์ด ์ด๊ฒ์ ๋ด ์ฝ๋๋ฒ ์ด์ค ๋ด์์ ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ์์์ํต๋๋ค.
์๋ง๋ ์ด๊ฒ์ ํญ ๋ ๊ณต๋ฐฑ ์ ํ ์ธ์์ด์ง๋ง์ด ๋ณ๊ฒฝ์ด ํ์ํ ์ด์ ๋ฅผ ์์ ํ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ API๋ฅผ ๋ชจ๋ธ๋งํ๋ ค๋ ๋ฐฉ์์ ๋ ํฐ ๋ณํ์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ฉด ์ฝ๊ฐ์ ์ด๋์ ์ํ ํฐ ๋น์ฉ์ฒ๋ผ ๋ณด์ ๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๋ ๋น์ ์ด ๊ฒฐ์ ํ ๊ฒ์ ํ์คํ ์ฌ์ฉํ๊ฒ ์ต๋๋ค ๐.
์ฝ๊ฐ ์คํํ์ด์ง๋ง (๋ด๊ฐ ์๋ ํ) ์๋ฌด๋ HTML ์์ฑ์ ๋งคํํ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ผ๋ก React๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด html/css/svg -> jsx ๋ณํ๊ธฐ๋ฅผ ๋ง๋ค ์๊ฐ์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ค์ ์ฌํ ์ผ์ ๋๋ค. ๋ฆฌ์กํธ ์ํ.
@jxub - 2014๋ ์ ํด์ปคํค ๋ฐฉ์์ ์ผ๋ถ๋ก HTML์์ JSX๋ก ๋ณํ๊ธฐ๋ฅผ ๋ง๋ค์์ต๋๋ค. https://magic.reactjs.net/htmltojsx.htm. ๊ทธ๋ฌ๋ SVG๋ฅผ ์ ์ฒ๋ฆฌํ๋์ง ํ์คํ์ง ์์ต๋๋ค. hackathon ํ๋ก์ ํธ๋ React(https://github.com/reactjs/react-magic)๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ HTML ์ฌ์ดํธ๋ฅผ "ajaxify"ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด์๊ณ ๊ทธ ์ค ์ผ๋ถ๋ React ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ถํด์ผ ํ์ต๋๋ค. HTML ๋ฉ์ด๋ฆฌ์์ HTML to JSX ๋ถ๋ถ์ ๋ณ๋์ ๋ ๋ฆฝํ ํ์ด์ง๋ก ๋ฆด๋ฆฌ์คํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ IE11 ์ง์์ ์ ๊ฒฝ์ ์ฐ๊ณ ์์ง๋ง ๊ธฐ์กด์ ๋ธ๋ผ์ฐ์ ์ฐจ์ด์ ์ค ์ผ๋ถ๋ฅผ ๋งค๋๋ฝ๊ฒ ๋ง๋ค์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด๋ ๋ง์ ์ต์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ทจํ๋ ์ ์ฅ์ ๋๋ค.
@gaearon - ๋ธ๋ผ์ฐ์ ์ฐจ์ด๋ฅผ ๋งค๋๋ฝ๊ฒ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์ต์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ๋ฌด์์ ๋๊น? ์ ์๊ฒ ๊ทธ๊ฒ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ์ด์ ์ค ํ๋์ ๋๋ค.
์๋ชจ ์ด๋ก : ์ด ์ ์ฒด className / class ๋ด์ค๋ ๋ชจ๋๊ฐ ์ฆ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ์ด์ ๋ํด ๋ ผ์ํ ๋ฐ์ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ ๊ฒ์ ๋๋ค. ์ฌ์์ ํ๋ก์ ํธ ์ ์ฒด์ ๋ํ ๊ด์ฌ์ ๋๊ฑฐ๋, ๊ทธ๋ฆผ์ ์์์ ์ผ์ด๋๊ณ ์๋ ๋ ํฐ ์ผ๋ก๋ถํฐ ์ฃผ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋, ๋ค์ ์ผํ์์์ฒ๋ผ ๋์ค์ ์ฒ ํํ ์ ์๋ ํ ๊ฐ์ง๋ฅผ ์ฃผ๊ณ ๋๋จธ์ง๋ ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค.
์๋ํ ์ฐ๊ทน ์์ ๊ฐ Tyshler๋ ํ๊ฒฝ์ ์ค์ผ์น๋ฅผ ๋ง๋ค๊ณ ๊ตฌ์์ ์์ ๋ น์ ๊ฐ๋ฅผ ๊ทธ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ ์ฌ์ฌ์์ ์ค ํ ๋ช ์ด "๋๋ ๋ค ์ข์๋ฐ ์ด ๊ฐ๋ ์ด๋ ์์ง?"๋ผ๊ณ ๋ฌป์ ์ํ๊น์ด ํ์จ์ ๋ด์ฌ๋ฉฐ ๊ทธ๋ ๋ฅผ ๋ถ์ก์๋ค.
์ด ๋ณ๊ฒฝ์ ์ง์ ํ ์ด์ ๋ ๋ช ํํ์ง ์์ง๋ง ์ด๋ฏธ ์ด ์๋ก์ด ์ ๊ทธ๋ ์ด๋ ํ๋ก์ ํธ์ ์ธ๊ธฐ์ React์ ๋ํ ์ปค๋ฎค๋ํฐ์ ์๋ฌธ์ด ๊ธ์์นํ์ต๋๋ค.
Passive Event Listeners ์ง์์ด ๋ชจ๋ฐ์ผ์ ์ค์ํ ๊ธฐ๋ฅ์ธ React Fire์ ๋ฒ์ ์์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ด ์์
์ ๋ํ ๋ชจ๋ ๋
ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ง๋ง className
-> class
๋ฅผ ์ฌ๊ณ ํด ์ฃผ์ธ์.
์ฐ๋ฆฌ๋ ๋ชจ๋ ํ๋ React ์ด๋ณด์์์ผ๋ฉฐ className
๋ ์ฐ๋ฆฌ๊ฐ React๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ๋ํ๋ ๊ฒ์ ๋ง์ง ๋ชปํ์ต๋๋ค.
jsx์ ํจ๊ป vue๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ฏธ class
๊ฐ className
$ ๊ฐ ์๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํฉ๋๋ค. React๊ฐ Virtual DOM์ ์ ๊ตฌ์์ด๊ธฐ ๋๋ฌธ์ className ์ด class
๋ก ๋ณ๊ฒฝ๋๋์ง ์ฌ๋ถ์ ๋์ํ์ง ์์ต๋๋ค. , DOM ์์ฒด๋ฅผ ๋ํ๋
๋๋ค.
๋ฌธ์๊ฐ ์๋ React ๋ฃจํธ์ ์ด๋ฒคํธ๋ฅผ ์ฒจ๋ถํ์ญ์์ค.
@gaearon ์ด๊ฒ์ ํ ์คํธ ํ๊ฒฝ์์ ์ค์ ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๊ณ ๊ทธ์ ์ฐ๊ฒฐ๋ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ ์ ์๋๋ก ๋ฌธ์์ ์์๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น? ์ด ์์ ์ ์ํํด์ผ ํ๋ ๊ฒ์ ๋งค์ฐ ์ง๊ด์ ์ด์ง ์์ผ๋ฉฐ React์ ๋ด๋ถ์ ์ต์ํ์ง ์์ ๋ง์ ๊ฐ๋ฐ์๊ฐ ํผ๋์ค๋ฌ์ํ๊ณ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ญ๋นํ๊ณ ์ด๋ฒคํธ ์๋ฎฌ๋ ์ด์ ๋ฐ ์ด์ ํ ํ ์คํธ ์ฌ๋ก๋ฅผ ๋ฐ์์ํค๋ ์์ธ์ด ๋์๋ค๊ณ ํ์ ํฉ๋๋ค.
react-dom/test-utils
์ ๋ํด ๋ญ๊ฐ๋ฅผ ํ ์ ์์๊น์? ์ ๋ ํนํ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์๊ณ ์๋ ๊ด๋ จ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ํ ๋ Simulate
์ ๊ฐ๋ฅํ ์ ๊ฑฐ์ ๊ด์ฌ์ด ์์ผ๋ฉฐ ๋ฌผ๋ก react-dom
์์ฒด์์ ํ์ํ ๋ณ๊ฒฝ์ ์ํํ์ฌ ์ค์ ๋ก ํ์ํ์ง ์๋๋ก ํฉ๋๋ค. ๋ ์ด์. ๋ฒ์์ ํด๋น๋ ์ ์์ต๋๊น?
/cc @kentcdodds
๋๋ React Fire๊ฐ ์ทจํ๊ณ ์๋ ๋ฐฉํฅ๊ณผ ํฐ ๊ทธ๋ฆผ์ ์ข์ํฉ๋๋ค. ์ง๊ธ๊น์ง ๊ทธ๊ฒ๋ค์ ๋ ธ๋ ฅํด์ผ ํ ํฐ ๋ณํ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋๋ถ๋ถ์ ๋ฐํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ข์ํ์ง๋ง className
๋ณ๊ฒฝ ์ฌํญ์ ๋ํด์๋ ํ์์ ์
๋๋ค.
React๋ ๊ตฌ์กฐํ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ด ํน์ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ์ง ์์ผ๋ฉฐ (...code snippet...)๊ณผ ๊ฐ์ ๊ฒ์ ์์ฑํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ์ง ์์ต๋๋ค.
์์ฑํ๋ ๋ฐ ๋ง์ ๋
ธ๋ ฅ์ด ํ์ํ์ง๋ ์์ง๋ง ํ์ฌ ๊ฒฝํ์ผ๋ก๋ ๋ค๋ฅธ ๊ฐ๋ฐ์(ํนํ ๋ค๋ฅธ ์ธ์ด์ ๊ฐ๋ฐ์)์๊ฒ ์ค๋ช
ํ๊ธฐ๊ฐ _๋ฐฉ๋ฒ_ ๋ ์ด๋ ค์ธ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋ฐ๋ฉด์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ ํ์ฌ์์ React๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ช ๋
๋์ className
์ ํผ๋์ค๋ฌ์ ํ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ ๋ช
๋ฟ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ Reacts API๋ก ๋ฐ์ ๋ช ๋ถ ์์ ํด๋์ค ์ด๋ฆ์ ์ค์ ํ์ต๋๋ค.
(๋ด ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ผ๋ก๋ ๋ด๊ฐ ํ๊ดดํ๋ ๊ฒ์ _์ฌ๋_ํ๋ ๋์, ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ๊ตฌ๋ฌธ์ ๋๋๋ก ์ด๋ณด์์๊ฒ ๊ทธ ์์ฒด๋ก ์ด์ํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค. ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ณด์ด๊ณ ๊ธฐ๋ณธ๊ฐ๊ณผ ๊ฐ์ ๊ฒ๋ค๊ณผ ๊ฒฐํฉ๋ ์ ์๋ ๊ฐ์ ธ์ค๊ธฐ์์ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. , ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์ฐ๋ฆฌ ํ์ฌ์์ ์์ฑํ๋ ๋ค๋ฅธ ๋ชจ๋ ์ฝ๋์ ๋ํ _ํฐ_ ์์ธ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋์ ๊ฒฝํ ๋ฌผ๋ก ๋ค๋ฅผ ์ ์์ง๋ง ๋ฌธ์ ์ ๋ํ ์ ๊ฒฌํด์ ๋๋ค ๐.)
์์ฒญ๋
๋ํ className
๋ณ๊ฒฝ์ ๋ํด ํ์์ ์
๋๋ค. ๊ทธ๊ฒ์ ์ฌ๋ฌผ์ ๊ณํ์์ ๊ฐ์ฅ ์ฌ์ํ ๋ณ๊ฒฝ ์ค ํ๋์ด์ง๋ง ์ฌ๊ธฐ์์ ๋
ผํ ํ ๋ก ์ ๊ฑฐ๋ํ ๋ฉ์ด๋ฆฌ๋ฅผ ๋์ด๋ค์ด๊ณ ์์ต๋๋ค.
๋ฐํ๋๊ณ ์๋ ๋ค๋ฅธ ์ข์ ๊ฒ๋ค์ด ๋๋ฌด ๋ง์๋ฐ, ๋ณํ์ ๊ทธ๋ ๊ฒ ๋ง์ ์ ์น์ ์๋ณธ์ ํฌ์ํ ๊ฐ์น๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์ ์๋ ์์น์์ ์ ๋นํ์ ์ผ๋ถ๊ฐ "๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์์ฑํ๋ ๊ฒ์ด ... ํจ์ฌ ๋ ๋ง์ ๋
ธ๋ ฅ์ด ํ์ํ ๊ฒ์ด ์๋๋๋ค."์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ์๋ค๋ฉด ๊ทธ ๊ฒฐ์ ์ _๊ฑฐ๋ํ_ ๊ธ์ ์ ์ธ ์ธก๋ฉด์ด ์์ด์ผ ํฉ๋๋ค. className
-> class
๋ณ๊ฒฝ์ ๋ฐํ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๋น๊ตํ ๋ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค.
์ด๊ฒ์ ๐ฅ React Fire์ ์ฃผ์ ๋ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค
class
v/s className
์ ๋ํด JSX โ React๋ฅผ ์๊ธฐ์์ผ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
JSX๋ HTML์ฒ๋ผ ๋ณด์ด๋๋ก ์ค๊ณ๋ _DSL_์ด๋ฏ๋ก ๊ฐ๋ฅํ ํ HTML์ ๊ฐ๊น๊ฒ ์ ์งํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. DOM API์์๋ className
๋ผ๊ณ ํ์ง๋ง ๋๋ถ๋ถ์ DOM API๋ฅผ ์ง์ ๋ค๋ฃจ๊ธฐ๋ฅผ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ JSX๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
React์ API๊ฐ DOM API์ ๋ฐ์ ํ๊ฒ ์ผ์นํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๋ฉด ๋ณํ์์ ๋งคํ์ ์ํํ๋ ๊ฒ์ด ๊ด์ฐฎ๊ฑฐ๋ ๊ฐ๋ฅํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
<img src="avatar.png" class="profile" />
โ React.createElement("img", { src: "avatar.png", className: "profile" })
.
JSX ๊ตฌ๋ฌธ์ HTML์ ๊นจ๋ํ ์์ ์งํฉ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
@mhenr18 ์ด ๋งํ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
ํ์ฌ ์ํฉ:
์ ์๋ ์ํฉ:
className
-> class
์ธ์ง๋ ์ด์ :
React๊ฐ ์ค๋๋ ์คํ ์์ค๋ผ๋ฉด, ํด๋์ค๋ฅผ ํ์ฉํ๋ ๊ฒ(๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๊ฐ๋ ์ ์ผ๋ก ๋ ๊ฐ๊น๊ณ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ prop์ ๋ํ ํ์ดํ์ด ์ ์)์ ์ฅ์ ์ด ๋จ์ (์ฐจ๋จํ๊ธฐ ์ํด ์ฝ๊ฐ ๋ ๋ง์ ํ์ดํ์ ํ๋ ๊ฒ)๋ณด๋ค ์ค์ํ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด์จ๋ ์คํ๋ ๋ ์ฐ์ฐ์๋ฅผ ์ํ ๊ฒ์ ๋๋ค).
์ค์ ๋จ์ :
className
์ ์์กดํ๋ ์ ์ฒด ์ํ๊ณ๊ฐ ์๋์ ๋ฉ์ถฅ๋๋ค(๊ฑฐ๋ํ ์
๊ทธ๋ ์ด๋ ๋
ธ๋ ฅ)const {class: cls} = props
์
๋๋ค. ์ผ๋ฐ JS์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌดํจํ๋ฉ๋๋ค.for
htmlFor
๊ฐ ์๋ ์ด์ ๋ฑ).๋ด๊ฐ ์ ํ ๊ด๋ฆฌ์๋ผ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ฆ๊ฐ์ ์ธ ๋ฐ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ํธ?
@gaearon ์ด๋ฏธ ๊ณ ๋ คํ์ จ์ ํ ๋ฐ "React Fire" ๋๋ ์ด์ ์ ์ฌํ ํค์๋๋ก PR์ ํ๊ทธํ์ญ์์ค.
๋ฌธ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ํ๊ทธ๊ฐ ์ง์ ๋์ง๋ง PR์๋ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ ์ ์ฌ์ ๊ธฐ์ฌ์์๊ฒ ๋์์ด ๋ฉ๋๋ค.
์ด๊ฒ์ ์ ์ฒด Fiber ๊ฐ๋ฐ ์ค์ React Fiber ๋ฐ React Reconciler ๊ด๋ จ ์ปค๋ฐ์ ์ฐพ๋ git ๊ธฐ๋ก์ ์ฝ์ผ๋ ค๊ณ ํ ๋์ ๊ฒฝํ์์ ๋์จ ๊ฒ์
๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์
ํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์์ผ๋ก๋ ๊ธฐ์ฌํ ์ ์๋์ง ์์๋ณด๋ ค๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ฉ๋๋ค.
๋ํ className
์ ์ด๋ฆ์ class
๋ก ๋ณ๊ฒฝํ๋ฉด ์๋ก์ด ๊ฐ๋ฐ์์๊ฒ ํฐ ๋ง์ด๊ทธ๋ ์ด์
๋
ธ๋ ฅ๊ณผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
className
์์ฑ์ ๋๋ฌด ๋์ ๋๊ณ ๋ง์ด ์ฌ์ฉ๋์ด ๋ง ๊ทธ๋๋ก ๋ฐ์์ ์์กดํ๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊นจ๋จ๋ฆด ๊ฒ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ํํ ๋ฆฌ์ผ์ ๊นจ์ง ๊ฒ์
๋๋ค. ๊ธฐ์ฌ์์ ์ ์ฅ์น ๋ณต์ฌ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ๋ "์ ์๋ํ์ง ์๋์ง, className
๋ ์ ํจํ ์ํ์ด ์๋๋๋ค"๋ผ๊ณ ๊ถ๊ธํดํ ๊ฒ์
๋๋ค.
๊ทธ๋์ ์ ๋ฐฐ๋ ๋์์ผ ํ๊ณ ์ฐ๋ฆฌ๋ ์๋ฌด ๊ฒ๋ ์ป์ง ๋ชปํ์ต๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๋น์ ์ด ๊ธฐ๋ํ๋ ๊ฒ์ฒ๋ผ ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์ค๋ช
ํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก className
๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์์ ํด๋์ค๋ฅผ ์ ์ํด์ผ ํ๋ค๊ณ ์ค๋ช
ํ๋ ๋ฐ 1๋ถ์ด ์ฑ ๊ฑธ๋ฆฌ์ง ์์ผ๋ฉฐ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. className
์์ class
๋ก ๋ณ๊ฒฝํ ์ด์ ๋ฅผ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ์ค๋ช
ํ๋ ๊ฒ์ ํจ์ฌ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ ๋ง์ ์ข์ ์ ์ด๋ํฉ๋๋ค.
ํ ๋จ์ด์ ํ์ํ ๋ชจ๋ ๋
ธ๋ ฅ.
๋ฐ์์ด ๋์ํ๋ ๋ฐฉ์์๋ ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
react-dom์ ๊ฐ๋ฐ์ ์ด์งํ์ง ์์ต๋๋ค.
๋ฐ์์ผ๋ก ์ผ์ฃผ์ผ ์ด์ ์ผํ๋ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ชจ๋ ๊ฒ์ ๊นจ๋จ๋ฆด ๊ฒ์
๋๋ค.
์๊ฐํด๋ณด์ญ์์ค, ์ ๋ง ๊ฐ์น๊ฐ ์์ต๋๊น?
๋๋ babel-plugin-react-html-attrs ๋ฅผ ๋ช ๋
๋์ ์ฌ์ฉํด ์์ผ๋ฉฐ ์ ์๋ํ๊ณ ์์ต๋๋ค className
์ ์ด๋ฆ์ class
๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ๋ด๊ฐ ์ธ๊ธํ ๊ฒ๊ณผ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ๋ ์ข์ต๋๋ค.
" class
v className
" / " for
v htmlFor
" ์ํฉ ์ ์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ Babel ํ๋ฌ๊ทธ์ธ ์ด ์์๋์?
์ด๋ฏธ ๊ฒฐ์ ๋ ๋ช ๋ช ๊ฒฐ์ ๊ณผ์ ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ html ์์ฑ์ ์๋ ๊ทธ๋๋ก ์ง์ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ณํ์ ์ํํ babel ํ๋ฌ๊ทธ์ธ์ด ์ด๋ฏธ ์๋ค๋ ์ฌ์ค์ ์๋ง๋ ์ฝ์ด JSX ํธ๋์คํ์ผ๋ฌ ์์ฒด์์ ์ด๋ฅผ ์ง์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํ๋ค๋ ์ฆ๊ฑฐ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ณต์ ์ฌ์์ผ๋ก ๋ง๋ค๋ฉด ๋ชจ๋ ์ฌ๋์ด ํจ์ฌ ๋ ์ฝ๊ณ ์ ๋ขฐํ ์ ์์ต๋๋ค.
๋๋ React ๋ด๋ถ์ ๋ํด ์์ง ๋ชปํ๋ฏ๋ก ์ค์ ๊ฐ๋ฅ์ฑ์ ๋ํด ๋ง์ด ๋งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์นํ์ฑ ์ธก๋ฉด์์ "ํด์ผ" ํ๋ค๊ณ ์๊ฐํ๋ ๋ฐฉ์๋ง์ ํํํฉ๋๋ค.
className
๋ class
๋ฅผ ์ฌ๊ณ ํ์ญ์์ค. ์์์ ๋งํ๋ฏ์ด ์ด๋์ ๊ฑฐ์ ์กด์ฌํ์ง ์์ง๋ง ์ค์ง์ ์ธ ๋จ์ ์ด ์์ต๋๋ค.
ํ๋๋ ๋ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํ ์ธ์ด๋ก Hax๋ฅผ ์ฌ์ฉํ๋ ์ฐ๋ฆฌ์๊ฒ ์ด๊ฒ์ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ผ ๋ฟ๋ง ์๋๋ผ ๋จ์ํ _any_ ๋ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค๋ ๊ฒ์ ๋๋ค.
class
๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์์ฝ๋ ํค์๋์ด๋ฉฐ ๋ ์ด์ ์ด ์ํ์ ์กฐ์ํ ์ ์์ด ๋ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๊ฒ ๋ง๋ค์์ต๋๋ค(ํด๋์ค๋ฅผ ์กฐ์ํ์ง ์๊ณ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐ ํ์ด์ ๋น๋๋ค). htmlFor
๋ for
๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์ฌํ๊ฒ๋ (์ด๊ฒ์ ์ ๋ง ๋ชป์๊ฒผ์ง๋ง ์กด์ฌํ๋ ๊ฒ์ ๊ฐ์ฌํฉ๋๋ค).
์ ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๊ฒ์ ๊ฐ๋ฅ์ฑ์ด... "React ํด๋์ค"์ ๋ํด Google์์ ๊ฒ์ํ๋ค๊ณ ์์ํด ๋ณด์ธ์. React ํด๋์ค ๊ตฌ์ฑ ์์, React ํด๋์ค ์์ฑ๊ณผ ๊ฐ์ ํผํฉ ์ ํธ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. "React className"์ ๊ฒ์ํ๋ฉด ์ค๋๋ ๋ฌธ์๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค(์์์ ์ธ๊ธํ ์ฌ๋๋ค์ ์ฝ๋ ์ ๊ทธ๋ ์ด๋ ์ธ์ ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์์ฒญ๋ ์์ ์ ๊ทธ๋ ์ด๋ ์์ ).
์ด ํ๋ก์ ํธ์ ๋ชฉํ๋ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ๋ ๋ง์ ์์ ๊ณผ ์ธํฐ๋ท์ ์ํ ๋ ๋ง์ ์ก์๊ณผ ํผํฉ ์ ํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๊น? ๋ด๊ฐํ์ง ํฌ๋ง.
์, ์น ๋ฐ JavaScript ์ํ๊ณ๋ ๊ณผ๊ฑฐ์ ์ด๋ฆฌ์์ ์ค์๋ก ์ญํธํ์ ์ ์งํ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ญํธํ์ ์ํ ์ด๋ฌํ ๋ ธ๋ ฅ ๋๋ถ์ ์ฃผ์ ํํธํ ์์ด ๊ทธ๋ฌํ ๊ท๋ชจ๋ก ์ฑ์ฅํ ์ ์์์ต๋๋ค.
๋๋ ๋ณํ ์์ด๋ ์ง์ ์ด ์๋ค๋ ๊ฒ์ ์ดํดํ๊ณ , ๋นจ๋ฆฌ ์์ง์ด๊ธฐ ์ํด ์ผ์ ๋ถ์๋ ์ด๊ธฐ FB์ ๋ชจํ ๋ฅผ ์ฑํํ์ต๋๋ค.
์ด ๋ณ๊ฒฝ์ด ์ ๋ง๋ก ํ์ํ ๋งํผ ๋๊ธฐ ์๊ฒ ํ๋ํ๋ค๋ฉด ๋ณ๊ฒฝ์ ์ง์ ํ ์ด์ ๋ฅผ ๋งํ์ญ์์ค. ๊ทธ๊ฒ์ "๋ฐฐ์ฐ๊ธฐ ์ด๋ ค์ด" ์ผ์ด ์๋๋๋ค. ๊ฐ๋ ฅํ React Core ํ์๊ฒ๋ ๋๋ฌด ์๊ฒ ๋ค๋ฆฝ๋๋ค. ๋น์ ์ ํ์คํ ๋ญ๊ฐ๋ฅผ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.
@sompylasar ๋๋ ์ผ๋ฐ์ ์ผ๋ก className= ๋๋ className:์ ๊ฒ์ํฉ๋๋ค. ์ด ๋ ๊ฐ์ง ๋ชจ๋ ํด๋์ค์์๋ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ github์์ ์ง์ ์ํํ๋ ํ์ด์ ๋น๋๋ค =/
์ฌ๊ธฐ ๋๊ธ ๋ค ์ฝ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฎ์ง๋ง class
์ ๋ํด์๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฃผ๋ ์ด์ ๋ JSX 2.0 ๊ณํ์์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ก ๊ฐ๊ธฐ ํ๊ธฐ๋ฒ์ ๋ํด (์ง๊ธ ๊ฐ์ฒด์ ์๋ ๊ฒ์ฒ๋ผ).
๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ๋งค์ฐ ์ข์ ๊ฐ์ ์ฌํญ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ต์ข
๊ฒฐ์ ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค :) ๋๋ผ์ด ๋
ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ทํ์ ์๊ฒฌ ์ค ํ๋์์ "์ค๋ ์๋ํ๋ฉด ๋ด์ผ ์๋ํด์ผ ํฉ๋๋ค"๋ผ๊ณ ์ธ๊ธํ์ต๋๋ค. ๋ด๊ฐ ๋ฌป๊ธฐ ์ ์ ์ด๊ฒ์ ๋ช ์ฌํ์ญ์์ค ;).
์ ๋ ๋ชจ๋ ๋ฒ์ ์ React๋ฅผ 15.4๋ก ๋๋๋ฆฌ๋ RMWC https://jamesmfriedman.github.io/rmwc/ ๋ผ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํตํฉ API ํ๋ฉด์ ์ ์งํ ์ ์์์ง๋ง className์ class๋ก, onChange๋ฅผ onInput์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ด๋ฒคํธ ์์คํ ์ ์ ๋ฐ ๊ฒ์ฌํ๋ฉด ๊ณ์ํ๊ธฐ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํด์ง๋๋ค.
ํ๋ ์๋์์ ์ด ํญ๋ชฉ์ ์ผ๋ถ๋ฅผ ๋ฒ์ญํ ์ ์๋ "ํธํ" ๋ ์ด์ด์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ๋ฐ๋ผ์ ๋ฐ์ ํ์ฌ๊ฐ ์ด๋ค ๋ฒ์ ์ด๋ ์์ฑํ ์ ์์ง๋ง ๋ ๋ฎ์ ๋ฐํ์์์ ๊ณ์ ์คํ๋ฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ด ์ด์ํ ์ฝ๋๊ฐ ๋ ์ด์ํด์ง ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๐
className
๊ฐ ์ค์ ๋ก class
๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ htmlFor
๋ for
๋ก ๋ณ๊ฒฝํ์ญ์์ค.
$ props
๋ฅผ ๊ตฌ์กฐํํ ๋ class
๋ฐ for
๊ฐ ์๋ ์ ํจํ์ง ์๊ธฐ ๋๋ฌธ์.
React์ ์ผ๊ด๋ API๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ง์ ์์ฑ ์ด๋ฆ์ ์ ๊ทํํ๋ ์์ฒด API๊ฐ ์๋ค๋ฉด ํ์คํ className
๊ฐ ์ด์ ์๋ฒฝํฉ๋๋ค. camelCase ๊ด์ฉ๊ตฌ์ ๋ํ ์ถ๊ฐ ๊ด์ฉ์ ํ์ต๊ณผ DOM ์์ฑ ์ด๋ฆ(์ผ๋ถ ๋ค๋ฅธ JSX ์์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก)์ ๋งคํ๋๋ค๋ ์ฌ์ค์ ์ฌ์ฉํ ๋๋ง๋ค ์ด๋ฅผ ํน๋ณํ ๊ฒฝ์ฐ๋ก ๊ตฌ์กฐํํด์ผ ํ๋ ๊ฒ๊ณผ ๋น๊ตํ ๋ ํ์คํ ๊ด์ฐฎ์ต๋๋ค. props ๊ฐ์ฒด๊ฐ ์ผ์ ธ ์์ต๋๋ค.
์ง๊ธ๊น์ง ํ์ ์ ์ง์ ๋ฐ๋ํ๋ ๋ชฉ์๋ฆฌ๋ฅผ ๋ง์ด ๋ค์ ๊ฒ ๊ฐ์ต๋๋ค("์ ์์ ์ ๋ชป ๋ฃ๋์?!"). ์ฌ์ฉ์ ๋ง์กฑํ๋ ๋ชจ๋ ์ฌ๋๋ค์ ์กฐ์ฉํ ์์์ต๋๋ค. ์ฌ๋๋ค์ด ๊ธ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ณด๋ค ๋ถ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ฅผ ํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋ ๋๋ค๋ ์ค๋๋ ์๋ด๊ณผ ์ผ์นํฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ ๋ค๋ฅธ ๋ง์ ๊ฒ๋ค ์์ ์์ ํ์ต ๊ณก์ ์ด ๋ํ๋ ๋๋ง๋ค ์ด ์ํ์ ํน๋ณํ ์ผ์ด์ค์ ๋ฃ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ๊ทธ ์ฃผ๋ณ์์ ์ข ๋ ๋ฏผ์ฃผ์ฃผ์์ ์ธ ๋ชจ์ต์ ๋ณด๊ณ ์ถ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ๋ณ๊ฒฝ์ ์์ํ์์ ์ํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ณธ์ง์ ์ผ๋ก ์ด ๋ณ๊ฒฝ์ ๊ณ ๋ คํ๊ฒ ๋ง๋ ๊ฒ์ ์ ์ฌ ์์ํ์์ต๋๋ค). ์ง๋ ์ชฝ. ๊ทธ๊ฒ์ด ๋งค์ผ ์ต์ํ์ ์ฌ๋๋ค์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ํด์์ ๋๋ค.
ps. ๋ค๋ฅธ๊ฑด ๋ค ๋ฉ์ ธ์ btw ํนํ ์ด๋ฒคํธ ๋ฌผ๊ฑด ๐๐ป
์๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค
@gaearon ์์ ์ ์๋ฅผ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๊น?
const { oneProp, twoProp, ...rest } = this.props;
return (
<div class={'something ' + rest.class} {...rest}/>
);
๋ฒ๊ทธ๊ฐ ํฌํจ๋์ด ์๊ณ ์์๋๋ก ์๋ํ์ง ์์ต๋๊น? "๊ตฌ์กฐํํ์ง ๋ง์ธ์"์ฒ๋ผ ๊ฐ๋จํ์ง ์์ ์๋ ์์ต๋๋ค.
ํด๋์ค๊ฐ className์ธ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ง ์์ ์ ์ผํ ์ฌ๋์ ๋๊น? ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๋์๊ฒ ๋ฌป๋๋ค๋ฉด ๋ด ๋ง์์ ๊ฒฐ์ฝ ์๊ฐํ์ง ์์ ๊ฒ์ ๋๋ค.
๊ทธ๋๋ ์ ๋ฐ์ดํธ๋ ๊ณต์ง์ด๊ณ ๋๋ ๊ณต์ง๋ฅผ ์ข์ํฉ๋๋ค.
ํด๋์ค๊ฐ className์ธ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ง ์์ ์ ์ผํ ์ฌ๋์ ๋๊น?
๋๋ ์์ ์ ๋ํด ์ ํ ๊ฑฑ์ ํ์ง ์๋๋ค. IE11์ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๊ฐ ๋ ์ฌ๋ฏธ์์ ๊ฒ์ ๋๋ค(๊ทธ๋๋ ์ ๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค)
Passive Event Listeners ์ง์์ด ๋ชจ๋ฐ์ผ์ ์ค์ํ ๊ธฐ๋ฅ์ธ React Fire์ ๋ฒ์ ์์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. #6436
๋์ํ๋ค. ๊ทธ๊ฒ์ ํ์คํ ์ด ์์ ์ ๋ฒ์์ ์์ต๋๋ค.
Hey @gaearon - ๋จผ์ ๊ฐ์ฌํฉ๋๋ค.
์ฌ๋๋ค์ด ์ด๋ป๊ฒ ๋ฐ์ํ๊ณ ์ด๋ค API๊ฐ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ๋ฌด์์ด ํผ๋์ค๋ฌ์ด์ง์ ๋ํ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํด ์ค๋ฌธ์กฐ์ฌ๋ฅผ ํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณธ ์ ์ด ์์ต๋๊น?
React๋ ์ง๊ธ๊น์ง ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์คํ์ด์ง๋ง ๋ฐฐ์ฐ๊ณ ์ฒ์ ์ฌ์ฉํ ๋ ๋ช ๊ฐ์ง ๋ฐํ์ด ์์์ ์์์ต๋๋ค. ๋๋ ๋ด๊ฐ ๊ฐ๋ฅด์น ์ฌ๋๋ค์ด ๊ฐ์ธ์ ์ผ๋ก ํผ๋์ค๋ฌ์ํ๋ ๊ฒ์ ๋จ์ํ ๋์ดํ๊ณ ์ถ์ง ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ฐธ์ฌํ ํ๋ก์ ํธ(Node, Bluebird ๋ฑ)์์ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํต์ฌ์์ ๋ณด๊ณ ์ถ์ ๊ฒ: ๋ ๊ฐ๋จํ ๋น์ ์ญ ์ข ์์ฑ ์ฃผ์ ์ง์, ๋ ์ฐ์ํ๊ณ ์ผ๊ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ(์ด๋ฏธ ๋ ผ์ ์ค์ธ)๋ฅผ ์ํฉ๋๋ค.
์ฌ๋๋ค์ด react >๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ด๋ค API๊ฐ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ๋ฌด์์ด ํผ๋์ค๋ฌ์ด์ง์ ๋ํ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํด ์ค๋ฌธ์กฐ์ฌ๋ฅผ ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณธ ์ ์ด ์์ต๋๊น?
๋๋ react-native๊ฐ canny.io๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ react๊ฐ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค.
์ ๋ ๋ชจ๋ ๋ฒ์ ์ React๋ฅผ 15.4๋ก ๋๋๋ฆฌ๋ RMWC https://jamesmfriedman.github.io/rmwc/ ๋ผ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํตํฉ API ํ๋ฉด์ ์ ์งํ ์ ์์์ง๋ง className์ class๋ก, onChange๋ฅผ onInput์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ด๋ฒคํธ ์์คํ ์ ์ ๋ฐ ๊ฒ์ฌํ๋ฉด ๊ณ์ํ๊ธฐ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํด์ง๋๋ค.
ํ๋ ์๋์์ ์ด ํญ๋ชฉ์ ์ผ๋ถ๋ฅผ ๋ฒ์ญํ ์ ์๋ "ํธํ" ๋ ์ด์ด์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ๋ฐ๋ผ์ ๋ฐ์ ํ์ฌ๊ฐ ์ด๋ค ๋ฒ์ ์ด๋ ์์ฑํ ์ ์์ง๋ง ๋ ๋ฎ์ ๋ฐํ์์์ ๊ณ์ ์คํ๋ฉ๋๋ค.
๋๋ ๋น์ ์ ์ฐ๋ ค์ ๊ณต๊ฐํฉ๋๋ค(๋๋ ๋ํ ๋์ ๊ณตํํ ๋ชซ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ผ์ต๋๋ค). ๊ทธ๋ฌ๋ ๋ฌด์์ด๋ ๋ณ๊ฒฝํ๋ ๋ฐ์๋ ๋๋ฌด ๋ง์ ์ ์ถฉ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ์ฌ๋ฌ ๋ฒ์ ์ ์ง์ํ๋๋ก ๋๊ธฐ๋ณด๋ค๋ ์ฌ๋๋ค์ด ์ ๊ทธ๋ ์ด๋ํ๋๋ก ๋๋ ๋ฐ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ด๋ ํธ์์ ์ค์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ ๊ฐ ์ ํ ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ง๋ง(16.3์์ ๋ผ์ดํ์ฌ์ดํด ๋ณ๊ฒฝ์ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ฅผ ์ํ ํด๋ฆฌํ์ ์ถ์ํ์ต๋๋ค) ์ด ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ต์ ํํ์ง ์์ต๋๋ค.
๋ด ์ ์์ ๋ฌด์ธ๊ฐ๊ฐ ํธํ๋์ง ์๋ ๊ฒฝ์ฐ ์ ์ ๊ณต์ ์๋ฅผ ๋ ์ ์ ๊ณต์ ๊น๋ ๊ฒ์ ๋๋ค. ์ฌ๋๋ค์ ์ํ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด์ ์ฃผ์ ๋ฒ์ ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํนํ ๊ณ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ์ ์ง ๊ด๋ฆฌ์ ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ๋ค๋ ๊ฒ์ ์๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ผ ํดํน ์ฝ๋๋ฒ ์ด์ค๊ฐ 2๊ฐ์ ๋ถ๊ธฐ๋์ง๋ง ์ผ๊ด๋ ์ฝ๋๋ฒ ์ด์ค๋ณด๋ค ๋์์ง ์ฌ๋ถ๋ ์์ฌ์ค๋ฝ์ต๋๋ค.
@jamesmfriedman codemod ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก) ์ API๋ก ์ ๋ฐ์ดํธํ ๋ค์ (๋น๋ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก) (codemod๋ฅผ ์ฌ์ฉํ์ฌ) ์ด์ API๋ก ๋ณํํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค(๋๋ฌด ๋ณต์กํ์ง ์์). ๊ทธ๋ฐ ๋ค์ ๋ ๋ฒ๋ค์ ๋ชจ๋ ๋ฐฐ์กํ๊ณ React ๋ฒ์ ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์๊ตฌํฉ๋๋ค.
๊ทธ๊ฒ์ ์ฝ๊ฐ์ ์์ ์ด์ง๋ง (์๋ฅผ ๋ค์ด webpack ํ๋ฌ๊ทธ์ธ์ด๋ npm ์ค์น ์คํฌ๋ฆฝํธ๋ก?) ํ ๋ฒ๋ง ์ํํ ์ ์์ผ๋ฉฐ ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํ ๋ฒ ๋ฆด๋ฆฌ์ค๋๊ณ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ๋๋ ์ข ๋ฅ์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
ํนํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ์ปดํ์ผ ์๊ฐ ํธํ์ฑ ๋ ์ด์ด์ ๊ฐ์ต๋๋ค.
for์ ๋ํ htmlFor ์ญ์ ๋ฅผ ์ง์ํฉ๋๋ค.
className๊ณผ class๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ธ๋ฆฌ์ง ๋ฆด๋ฆฌ์ค๊ฐ ์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํ์ฌ ์์ฌ ์ฝ๋๊ฐ ๋ฏธ๋์ ์ง๋ฉดํ ์ ์๋ ๋์ ์ด์ ์ ํ์ฌ React ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋๋ฉด ์์ ํ ์ต์ ํ๋ React DOM์ ๊ฐ๊ธฐ ์ํด ๋ธ๋ฆฌ์ง ํจํค์ง๋ฅผ ์ญ์ ํ๋ ๊ฒ๋งํผ ์ฝ์ต๋๋ค.
React API๋ ์ผ๊ด์ฑ์ด ์๊ณ ์ถ๊ฐ ๊ฐ์ ์ ๊นจ๋จ๋ฆฝ๋๋ค(htmlFor๊ฐ ์๋ ์ด์ ๋ฑ).
for
๋ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๊ณ ๋งํ์ ๋ ๋ง์ง๋ง ๋ฌธ์ฅ์ ๋์น ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ ๋๋ ๋ ๊ฐ์ ๋๋ฌธ SVG ์์ฑ์ ์ ์ธํ๊ณ "๋ํ ์ผ์ด์ค ์์ฑ ์ด๋ฆ"๊ณผ ์์ ํ ์ผ์นํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ ์ฒด "class v className" / "for v htmlFor" ์ํฉ์ ์ฒ๋ฆฌํ๋ Babel ํ๋ฌ๊ทธ์ธ์ด ์์๋์?
๋๋ ์ด๊ฒ์ ๋ํ ๊ฝค ๋ง์ ์ธ๊ธ์ ๋ณด์์ผ๋ฏ๋ก ๋ช ํํํ๊ณ ์ถ์ต๋๋ค. Babel ํ๋ฌ๊ทธ์ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ๋ณํ์ ์ํํ๊ธฐ์ ์ข์ ์ฅ์๊ฐ ์๋๋๋ค.
const props = {
class: "foo"
}
<div {...props} />
๋ํ class
๋ฅผ ์ ๋ฌํ์ง๋ง ๊ตฌ์ฑ ์์์ ์ํ์์ className
๋ฅผ ์ป๋ ๊ฒ๋ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๋๋ ํ๋ฌ๊ทธ์ธ์ด ํ๋ซํผ ์์๋ง ๋์์ผ๋ก ํ๋ค๋ฉด button
๋ฅผ Button
๋ฐ๊พธ๋ฉด class
์ํ์ด ์ปดํ์ผ๋๋ ๋์์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
์ด๋ฅผ ์ํด Babel ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ์์ฑ ์ค์ธ ์ฝ๋์ ์๋ฏธ๊ฐ ๋ชจํธํด์ง๊ณ ๋ ๋ง์ ํผ๋์ด ์ผ๊ธฐ๋ฉ๋๋ค. ์ ์๊ฐ์๋ className
๋๋ class
๋ง ํ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ์๋ฃจ์
์
๋๋ค.
์ฌ๋ฏธ์๋ ์ฌ์ค: ์ด๊ฒ์ด JSX ์ปดํ์ผ๋ฌ์ ์์ฃผ ์ค๋๋ ๋ฒ์ ์ด ์๋ํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋์์ ํผ๋์ค๋ฝ๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐ๋์์ต๋๋ค.
๋ฉ์ง ๋ณํ . . .
๋๋ผ์ด! ์ด๋ฌํ ํฅ๋ฏธ๋ก์ด ์
๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋
ธ๋ ฅํ ๋ชจ๋ ๊ธฐ์ฌ์์๊ฒ ๊ฐ์ฌํฉ๋๋ค.
className
> class
๊ฐ ์ด๋ ๊ฒ ํฐ ์ค์บ๋ค์ธ์ง ๋ชฐ๋์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ต์ํด์ก์ต๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์ ๋ฐ ์ด๋ฒคํธ ์์คํ ์ ๊ทธ๋ ์ด๋๋ ์ ๋ง ์ ๋งํฉ๋๋ค. ์ํผ ์คํ ํน!
์ด๋ฒคํธ ์์คํ
์ ํด๋ฆฌํ์ ๋ณ๋์ ํจํค์ง๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ ๋ง ๊ธฐ๋ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ className > class๊ฐ ๋๋ฌด ๊ธ์ง์ ์ด๋ React๋ ๋๋ฌด ๊ด๋ฒ์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ด๋ก ์ธํด ๋ง์ ์์คํ
์์ ์์์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํฉ๋๊น?
React DOM์ 1/3์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์น ์ฑ ๊ฐ๋ฐ์์ React๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
key
๋ฐ ref
$ ์ ๊ฐ์ ํน์ ์ํ์ ๋ฐ์ํ๋ ๋ค์์คํ์ด์ค๋ ์ข์ ๊ฒ์
๋๋ค. ์
<Foo @key="foo" @ref={callback} prop="hi" />
์ด๊ฒ์ ์ฌ๊ธฐ์์ ๋ ผ์๋์์ต๋๋ค - https://github.com/facebook/jsx/issues/66
@elado ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋์ ํ๊ณ ์ถ์ ๊ฒ์ผ ์๋ ์์ง๋ง DOM์ ํน์ ํ์ง ์์ API์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๋ฒ์ ๋ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํฅ๋ฏธ๋กญ๊ธด ํ์ง๋ง ํนํ ๋ฒ๋ค ํฌ๊ธฐ์ ๊ฐ์๋ ํญ์ ํ์ํฉ๋๋ค. ๋ด ๊ฑฑ์ ์ Facebook ์ฌ๋๋ค์ด API ๋ณ๊ฒฝ์ ๊นจ๋ ๊ด์ฑ, ๊ณ ํต ๋ฐ ๋จํธํ๊ฐ ์ํ๊ณ์ ์ปค๋ฎค๋ํฐ์ ์ผ์ผํฌ ์ ์๋ ๊ด์ฑ, ๊ณ ํต ๋ฐ ๋จํธํ๋ฅผ ๊ณผ์ํ๊ฐํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ค์ด FB์ ๊ฑฑ์ ํ ๊ตฌ์ฑ ์์๊ฐ ๋ง์ ๊ฒ์ ์ฌ์ค์ด์ง๋ง, ๊ทธ๋ค์ด ์ป์ ์ด์ ์ ๋๋ถ๋ถ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ์ถํ์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ์คํ ์์ค ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ต์ํ์ ์ข ์์ฑ์ ๋๋ค. ๋ง์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ฒฝ์ฐ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ Proptypes๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ๋ง์ ๋ ธ๋ ฅ๊ณผ ๊ธฐ๋ค๋ฆผ๊ณผ ์ข์ ์ด ํ์ํ์ต๋๋ค. ์ ํ๋ ์์์ผ๋ก ์์ ์ ์ธ ๋น์ฆ๋์ค๋ฅผ ๊ตฌ์ถํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋น ๋ฅด๊ฒ ์์ง์ด๊ณ ๊นจ๋ ๊ฒ์ด ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
๋๋ ๋ฐ์์ ์ ๋ง ์ฆ๊น๋๋ค. API๋ ๊ฐ๋จํ๋ฉฐ ๊ฐ์ธ์ ์ผ๋ก ๊ตฌ๋ฌธ์ ๋ฐฐ์ฐ๊ณ ์กฐ์ ํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ๋๋ ์ ์ง ๊ด๋ฆฌ์๊ฐ ์ํ๊ณ ์ ๋ฐ์ ๊ฑธ์น ๋ณ๊ฒฝ ์ฌํญ์ ์ฅ๋จ์ ์ ์ ์คํ๊ฒ ํ๊ฐํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฒด ์ํ๊ณ๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ์ค์ฉ์ ์ผ๋ก ์๊ฐํ ๊ฒ์ ๊ฐ๋ ฅํ ์ด๊ตฌํฉ๋๋ค.
๊ทธ ์ธ์๋ React๋ฅผ ๊ตฌ์ถ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ ธ๋ ฅ๊ณผ ๊ทธ ๋ค์์๋ ์์ง๋์ด์ ์ด์ ์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค. :)
์ด ๋ฏธ๋์ {...์ ๋ฐ์ดํธ}๋ ๐ฅ
className
-> class
: ํด๋์ค ์์ฑ์ด JSX/๊ฐ์ฒด ์ ์ธ ์ธ๋ถ์ ์ ์๋์ด ์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์๋ ๋์ผํ ํญ๋ชฉ์ ๋ํด ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๊ณ ์ฝ๋ ๋ณต์ก์ฑ๊ณผ ์ธ์ง ๋ถํ๊ฐ โโ์ฆ๊ฐํฉ๋๋ค.
์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๋๋ฒ ์ด์ค์์ ์์ฑ/์ํ ์ด๋ฆ ๋ถ์ผ์น๋ฅผ ์ ๊ฑฐํ์ง ์์ต๋๋ค. ๊ตฌ๋ฌธ ์ ํ์ผ๋ก ์ธํด ๋๋ ๊ธฐ๋ณธ DOM์ผ๋ก ์์
ํ ๋ ์ด๋๊ฐ์ ์กด์ฌํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด ๋ช
๋ช
๋ฌธ์ ์ ๋ํด "ํ์คํ"๋(๊ทธ๋ฆฌ๊ณ ์ด ์์ ์์ ์ ํ๋ฆฝ๋) ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ง๋ ๊ฒ์ ์ข์ ์ผ์
๋๋ค.
ํ์ฌ className
๋ ์ด๋์์๋ ์ผ๊ด๋๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ DOM์ผ๋ก ์์
ํ ๋๋ ํญ์ ๊ฐ์ ๊ฒ์ ์ฐธ์กฐํฉ๋๋ค. ์ค์ ๋ก ๋ฐ์์ ๋ง ๊ทธ๋๋ก ์ ์ผํ ์ฅ์์ผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ํด๋์ค ์์ฑ์ ์ฐธ์กฐํ๊ธฐ ์ํด class
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
className
๋ ์ฒ์๋ถํฐ ์๋นํ ๋ถํ์ํ๊ณ ์ฝ๊ฐ ํผ๋์ค๋ฌ์ ๋ณด์์ง๋ง ๋์ค์๋ ์๋นํ ์ค์ฉ์ ์ด๊ณ ๋น๊ต์ ์ต์ํด์ง๊ธฐ ์ฝ์ต๋๋ค.
๋ํ dangerouslySetInnerHTML
$์ ๋ํ ์ถ๊ฐ ๊ฐ์ฒด { __html }
๋ ์ ๋ง ๋ถํ์ํด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ์ง๋ง ๋ง์ด๊ทธ๋ ์ด์
๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ ๊ฐ์น๊ฐ ์์ ์๋ ์์ต๋๋ค(์ด ๋ฌธ์ ์ ์ ํ ๊ด๋ จ์ด ์์ ์๋ ์์).
๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์ฌ ์ ์ ๊ฐ์ ์ ์์ฑํ์ง๋ง ํจ์ฌ ๋ ํฅ๋ฏธ๋กญ๊ณ ์ค์ํ๋ฏ๋ก fb ํ์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์์๋ก ์ค์ ์ฌ์ฉ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ฐ ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ด๋ฏธ ์ต์ React(์ฌํ๊ฒ๋)์ ํ์ฐธ ๋ค์ณ์ ธ ์์ต๋๋ค. ์๋ํ๋ฉด ์ด์ ๋ฒ์ ์ React๋ ์ ๊ทธ๋ ์ด๋์ ์์กดํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ๋ฌธ์ ๋ฅผ ๊นจ๋จ๋ ธ๊ธฐ ๋๋ฌธ์ ์ง์ฐ์ด ๋ฐ์ํ์ต๋๋ค.
์ด์์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์ ์๊ณ ์ถ์ต๋๋ค.
์ค์ ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
'๋ฐฐ์ก ์ฝ๋ ๊ด์ '์์ ๋ณด๋ฉด ๋ชจ๋ ์ฃผ์ ์ ๊ทธ๋ ์ด๋๋ ๋ชจ๋ ์ข ์์ฑ์ ์ ๋ฐ์ดํธํ๊ณ , ๋ชจ๋ ๊ฒ์ ๋ค์ ํ ์คํธํ ๋ค์, ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์๋ก์ด ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ฑ๊ฐ์ ๊ธฐ์ ์ ๋ถ์ฑ์ ๊ฑฐ๋ํ ์กฐ๊ฐ์ด ๋ฉ๋๋ค. ์น๋ช ์ ์ธ ์ทจ์ฝ์ ์ด ์๊ฑฐ๋ ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ ๊ฒ์ด ์ง์ ์ผ๋ก ๋นํ์ค์ ์ด์ง ์๋ ํ(๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ์ค์ด ๋์) ์ฐ์ ์์๊ฐ ๋ฎ์์ง๋๋ค.
๋ถํํ๋ 0.x ํจ๋ฌ๋ค์์ ๋ฒ์ด๋ฌ์์๋ ๋ถ๊ตฌํ๊ณ ํต์ฌ ์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ ค๋ ๋ ธ๋ ฅ์๋ ๋ถ๊ตฌํ๊ณ React๋ ์ฌ์ ํ ๋ฒ์ ๋ฒํธ๋ฅผ ํ์ ๊ณ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ฐ ๋งํ๊ณ ์ ํ๋ ๋ฐ๋ ์์ผ๋ก์ ํฐ ๋ณํ๊ฐ ๊นจ์ง์ง ์๋๋ก API๋ฅผ ๊ณํํด ๋ณด์ธ์.
(๋ํ IE11์ EOL์ด ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌํ ์ผ์ ๋๋ค. ๋ง์ง๋ง ๋ฆด๋ฆฌ์ค๋ 52์ผ ์ ์ ๋๋ค. React ํ์ ์ด๊ฒ์ด Facebook ํ๊ณผ ๋ชจ๋ ์ธ๋ถ ๋ฐ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ ์์ ์ ํธ์ํ์ฌ ์ด๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋์ ์).
@urugator
๋๋ ๋ํ ์ค์ ๋ก ๋ถํ์ํด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ํํ๊ฒ SetInnerHTML์ ๋ํ ์ถ๊ฐ ๊ฐ์ฒด { __html }์ ์ ๊ฑฐํ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์๋์ ์ผ๋ก ๋ช ์์ ์ด๋ฉฐ ์ค์๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ์ค๊ณ๋์์ต๋๋ค. ์ ๊ฑฐ๋ ๊ฒฝ์ฐ ์ ์ ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ค์๋กrisklySetInnerHTML์ ์ ๋ฌ๋ ์ ์์ต๋๋ค.
@philipwhiuk
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ฐ ๋งํ๊ณ ์ ํ๋ ๋ฐ๋ ์์ผ๋ก์ ํฐ ๋ณํ๊ฐ ๊นจ์ง์ง ์๋๋ก API๋ฅผ ๊ณํํด ๋ณด์ธ์.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ์ ์ ๊ฐ์ ํ๋ ๋ฐ ํ์ํ๋ฉฐ React๋ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฑ ์๊ฐ ์๊ฒ ์ํํฉ๋๋ค. componentWillReceieveProps๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด React Suspense์ ๊ฐ์ ํ๋ฅญํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ปค๋ฎค๋ํฐ์ ์ํํธ์จ์ด๋ ์ด์ API๊ฐ ์์ํ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ๊ฒ์ ๋๋ค. ํ ๋ฒ์ ํ๋์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ฉด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ํ IE11์ EOL์ด ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌํ ์ผ์ ๋๋ค. ๋ง์ง๋ง ๋ฆด๋ฆฌ์ค๋ 52์ผ ์ ์ ๋๋ค.
์๋ฌด๋ IE 11์ ์ฌ์ฉํ์ง ์์ต๋๋ค. React์ ํ์ฌ ๋ฒ์ ์ ์ค์ ๋ก IE 11์ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํด ํด๋ฆฌํ์ ํ์๋ก ํ๋ฏ๋ก ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ IE 11 ๊ฐ๋ฐ์ ๊ฑฐ์ ๋์ผํ ์ํฅ์ ๋ฏธ์น ๊ฒ์ ๋๋ค. https://reactjs.org/docs/javascript-environment-requirements.html
๋๋ ๋ํ ์ค์ ๋ก ๋ถํ์ํด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ํํ๊ฒ SetInnerHTML์ ๋ํ ์ถ๊ฐ ๊ฐ์ฒด { __html }์ ์ ๊ฑฐํ ๊ฒ์ ๋๋ค.
@urugator - Facebook ๋ด๋ถ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ __html
๋ ์๋ฒ์์ ๋ ๋๋ง๋ HTML์ React ๊ตฌ์ฑ ์์ ํธ๋ฆฌ์ ์ฝ์
ํ๋ ๊ฒ์
๋๋ค. ํด๋น ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ์๋ฒ ์ธก์์ __html
๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๊ณ ํด๋ผ์ด์ธํธ ์ธก์์ ์ํํ๋ ๊ฒ์ ๋ํ ๋ฆฐํธ ๊ท์น์ด ์์ต๋๋ค. ์๋ฒ ์ธก์์๋ XHP ๋ฅผ __html
์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด๋ก ์ง๋ ฌํํ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด๋ XHP๊ฐ JSX์ ๋งค์ฐ ์ ์ฌํ๊ณ (์ค์ ๋ก JSX์ ์ฃผ์ ์๊ฐ์ด ๋จ) XSS ๋ณดํธ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋์๋ ๋ณด์ ํ์ ์ ๋์
ํ์ง ์๋๋ก ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก __html
๊ฐ์ฒด ๋ ์ด๋๊ฐ ์์ ์ญ์ ๋์์ผ๋ฉฐ DOM์ ์ง์ ์ฝ์
ํด๋ ์์ ํ HTML ๋ฌธ์์ด์ ํ์ํฉ๋๋ค. ์์ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ค์๋ก ์์ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐํํ๋์ง(๋ฐ๋ผ์ XSS ๊ตฌ๋ฉ์ด ๋ฐ์ํ๋์ง) ์ญ์ ๋์๋์ง ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
์, ๋๋ถ๋ถ์ ์ฑ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ง์ง ์์์ผ ํ๊ณ ์ฌ์ฉ ์ฌ๋ก๊ฐ ํฉ๋ฆฌ์ ์ผ๋ก ํฌํจ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก React ๊ตฌ์ฑ ์์์์ ์ง์ __html
๊ฐ์ฒด๋ฅผ ์์ฑํด์๋ ์ ๋๋ฉฐ, ์คํ๋ ค ์ด๋ฅผ ๋ฐํํ๋ ํจ์๊ฐ ์์ด์ผ ํฉ๋๋ค(๋ฌธ์์์ createMarkup
ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ฐธ์กฐ: https://reactjs. org/docs/dom-elements.html#dangerouslysetinnerhtml)
๋ด ๊ฑฑ์ ์ Facebook ์ฌ๋๋ค์ด API ๋ณ๊ฒฝ์ ๊นจ๋ ๊ด์ฑ, ๊ณ ํต ๋ฐ ๋จํธํ๊ฐ ์ํ๊ณ์ ์ปค๋ฎค๋ํฐ์ ์ผ์ผํฌ ์ ์๋ ๊ด์ฑ, ๊ณ ํต ๋ฐ ๋จํธํ๋ฅผ ๊ณผ์ํ๊ฐํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋น์ ์ด ์ด๋์์ ์๋์ง ์์ ํ ์ดํดํฉ๋๋ค. ํ์ง๋ง React ํ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ฑ์ฉ๋๊ธฐ ์ ์ Facebook ์ธ๋ถ์์ React๋ฅผ ์ง์ ์ฌ์ฉํด ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค. ์ข ์ข ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋์ ์ ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์คํ ์์ค ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๋ ์ข ๋ฅ์ ๋ฌธ์ ์ ๊ณต๊ฐํ๋ ๋ฐ ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ 2๋ ๋์ React๋ฅผ ์ฌ์ฉํด ์์ผ๋ฉฐ ์๋ฅผ ๋ค์ด ๋ถ๋ชจ/์์ ์ ์ปจํ ์คํธ ์ ํ์ผ๋ก ์ธํ ๋จํธํ๋ฅผ ์์ฃผ ์ ๊ธฐ์ตํฉ๋๋ค. ํต์ฌ์ ์ข์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ์ธ์ฐ๋ ๊ฒ์ด์๊ณ ์ด๋ ์์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
๊ทธ๋ค์ด FB์ ๊ฑฑ์ ํ ๊ตฌ์ฑ ์์๊ฐ ๋ง์ ๊ฒ์ ์ฌ์ค์ด์ง๋ง, ๊ทธ๋ค์ด ์ป์ ์ด์ ์ ๋๋ถ๋ถ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ์ถํ์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ์คํ ์์ค ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ต์ํ์ ์ข ์์ฑ์ ๋๋ค.
์ด๊ฒ์ ์ญ์ฌ์ ์ผ๋ก ์ ํ ๊ฐ๋ฐ ์ธก๋ฉด์์ ์ฌ์ค์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ Yarn์ด ๋ง๋ค์ด์ง๊ณ ์น ๋ฆฌํฌ์งํ ๋ฆฌ์ ํตํฉ๋ ์ดํ๋ก ๋ด๋ถ ๋๊ตฌ ํ์ด์ง์์ ์ฌ์ฉ๋๋ ํ์ฌ ๊ตฌ์ฑ ์์์ ์๊ฐ ์ฆ๊ฐํ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ํจํค์ง์์๋ ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ด ํ์ํฉ๋๋ค.
๋ค๋ฅธ ๋ง์ ํ์ฌ์ ๋ฌ๋ฆฌ ์ฐ๋ฆฌ๋ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ๋์ผํ ๋ฒ์ ์ React๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ์๊ฒ๋ ๊ณ ์ ํ ๊ณผ์ ๋ ์์ต๋๋ค(์: ์ผ๋ถ ์ ํ์ ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ์ํด "๊ธฐ๋ค๋ฆผ"๋ง ํ ์ ์์). ์ด๊ฒ์ ํ์คํ ์ข์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ๊ฐ๊ณ ์คํธ๋ ์ค ํ ์คํธ ์ญํ ์ ํ๋๋ก ๋ ๋ง์ ์๋ ฅ์ ๊ฐํ ๊ฒ์ ๋๋ค.
๋ง์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ฒฝ์ฐ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ Proptypes๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ๋ง์ ๋ ธ๋ ฅ๊ณผ ๊ธฐ๋ค๋ฆผ๊ณผ ์ข์ ์ด ํ์ํ์ต๋๋ค. ์ ํ๋ ์์์ผ๋ก ์์ ์ ์ธ ๋น์ฆ๋์ค๋ฅผ ๊ตฌ์ถํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋น ๋ฅด๊ฒ ์์ง์ด๊ณ ๊นจ๋ ๊ฒ์ด ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์์ต๋๋ค.
React.PropTypes = require('prop-types')
React.createClass = require('create-react-class')
์ฐ๋ฆฌ๋ "๊นจ๋ํ ์ฌ๋ ์ดํธ"๋ก ์์ ํ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ฌ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋๋ React๋ก ์์ํ๋ ์ฌ๋๋ค๊ณผ ์ฝ๋๋ฒ ์ด์ค์ ๋ ํ๋์ ์ธ ๋ถ๋ถ์ ๊ทธ ๋ฌด๊ฒ๋ฅผ ์ง์ด์ง ํ์๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๋ ๋ฐฉ์์ ๋๋ค. ์ฐ๋ฆฌ๋ ์๋ก์ด React ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ ํํ๊ณ ์ถ์ง๋ง ์ผ๋ถ ๋ถ๋ถ์ด ํดํน๋ ์ ์๋๋ผ๋ ์ฐ๋ฆฌ ์์ ๊ณผ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์ ์ํด ์ข์ ๋ง์ด๊ทธ๋ ์ด์ ์คํ ๋ฆฌ๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค.
์ ๊ฐ ์ถฉ๋ถํ ๋ช
ํํ๊ฒ ์ ๋ฌํ์ง ๋ชปํ์ ์ ์์ผ๋ฏ๋ก ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋๊ท๋ชจ ๋ณ๊ฒฝ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฒ์ ์ด ๊ณต์กดํด์ผ ํ ์๋ ์๋ค๋ ์ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ ๊ตํ๊ณ ์ ์คํ๋ ๋ง์ด๊ทธ๋ ์ด์
์ ๋ต์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด class
์ ํจ๊ป ๊ณํ์ ํ๋ฃป๋ฐค ์ฌ์ด์ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋กค์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ๋ช
ํ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ์๋ง๋ ์ฐ๋ฆฌ๊ฐ ๋ ๋ค ํ์ฉํ๋ ์ ์ ๊ธฐ๊ฐ ๋๋ ๋์ฐ๋ฏธ๊ฐ ๊ทธ๊ฒ์ ๋ ์ฝ๊ฒ ํ ์ ์๋๋ก ํ ๋ค์ ์ ์ง์ ์ผ๋ก ์ด์ ์ด๋ฆ์ ๋จ๊ณ์ ์ผ๋ก ์์ ๋ ๊ฒ์
๋๋ค. . ์์ง ๊ตฌ์ฒด์ ์ธ ์ ๋ต์ ์์ง๋ง ์ฐ๋ฆฌ์ ๋น์ ๋ชจ๋๋ฅผ ์ํ ์ข์ ์ ๋ต ์์ด๋ ๋ณํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ถ๋ช
ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๊ฒ ์๊ฐํ๋ ๊ฒ์
๋๋ค.
(๋ํ IE11์ EOL์ด ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌํ ์ผ์ ๋๋ค. ๋ง์ง๋ง ๋ฆด๋ฆฌ์ค๋ 52์ผ ์ ์ ๋๋ค. React ํ์ ์ด๊ฒ์ด Facebook ํ๊ณผ ๋ชจ๋ ์ธ๋ถ ๋ฐ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ ์์ ์ ํธ์ํ์ฌ ์ด๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋์ ์).
๋๋ ๋น์ ์ด ๋งํ๋ ๊ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋๋ IE11์ด "๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค"๊ณ ๋งํ ์ ์ด ์์ต๋๋ค.
๋ด ๊ฒ์๋ฌผ์ IE11๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ํด ์ง๊ธ๋ณด๋ค ๋ ๋ง์ ํด๋ฆฌํ์ด ํ์ํ ์ ์๋ค๊ณ ๋งํฉ๋๋ค. React ๋ ์ด๋ฏธ IE11์์ ์ผ๋ถ ํด๋ฆฌํ์ ํ์๋ก ํฉ๋๋ค . ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๊นจ๊ณ ์ถ๋ค๋ ๋ง์ ์๋๋๋ค. ์ฌ์ ํ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ํ๋ ค๋ฉด ๋ ๋ง์ ํด๋ฆฌํ์ ํฌํจํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์์ ํ ๊ณต์ ํด ๋ณด์ธ๋ค.
๋ํ Facebook์ ๋ค๋ฅธ ํ์ "์์ ์ ํธ์"ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ๊นจ๋จ๋ฆฌ๋ฉด ๊ทธ๊ฒ์ ๊ณ ์น ์ฑ ์์ด ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ๋ง์ ๊ด์ฌ์ ๊ธฐ์ธ์ด๋ ์ด์ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ง์ ์คํํด์ผ ํฉ๋๋ค.
Re: ๊ทํ์ ๋๋จธ์ง ์๊ฒฌ โ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ํด ์ ๋์ ์ธ ๋ณ๊ฒฝ์ ํ์ง ์์ต๋๋ค. ์ฌ์ค ์ฐ๋ฆฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊นจ์ง๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ๋งค์ฐ ์ด์ฌํ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. React์๋ ๋ณต์กํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ด ๋ง์ ๋ถ๋ถ์ด ์์ง๋ง ๋ช ์์ ์ผ๋ก ๋ถ์์ ํ ๊ฒ์ผ๋ก ํ์๋ ๊ฒฝ์ฐ์๋ ๋ ๊ฑฐ์ API๋ฅผ ์ง์ํ๋ ค๋ ์ ์ผํ ์ด์ ๋๋ฌธ์ ์ ์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์๊ฐ ๋ฌธ์ ์ ๋ฌด๊ฒ๊ฐ ์์ด๊ณ ์์ผ๋ก ๋์๊ฐ๊ณ ์์ ํ๊ธฐ ์ํด ์ฌ๋ ์ดํธ๋ฅผ ์ฒญ์ํด์ผ ํฉ๋๋ค. ๋ด OP ๊ฒ์๋ฌผ์ ๋ฌธ์ ๋ ์ ํํ ๊ทธ๋ฐ ์ข ๋ฅ์ ๋ฌธ์ ์ ๋๋ค. ํผ์์๋ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ ์ํํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐํฉํ์ฌ ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ด ๋ ธ๋ ฅํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์ฌ๋๋ค์ด ์ด๊ฒ์ ๋ํด ๋ถ์ ์ ์ธ์ง ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. ์ข ์์ฑ์ด ์ ๊ทธ๋ ์ด๋๋ ๋๊น์ง ์ ๊ทธ๋ ์ด๋ํ์ง ์์ต๋๊น?
class
vs className
๋ฐ for
vs htmlFor
์ ๋ํ ํค์๋ ๋ฌธ์ ๋ jsx ์ปดํ์ผ๋ฌ๊ฐ ์์ฝ์ด๋ฅผ ์ฌ์ ์ํ๊ธฐ ์ํด ์ฒ๋ฆฌํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋๋๊น?
๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์ธ๋ชจ์๋ ๋ต๋ณ์ ์ ๊ณตํ ๋งํผ ๋ณ๊ฒฝ ์ฌํญ์ด ์ถฉ๋ถํ ํฐ ๊ฒฝ์ฐ์๋ง ์ ๋ง ๊ฑฑ์ ํ ๊ฒ์ ๋๋ค... "angular -angularjs -angular1.x" ๋ฑ์ ์ธํฐ๋ท ๊ฒ์ํ ๋ ๋์ ๋ ๊ณ ํต angular 2+์ ๊ฐ์ด
๊ทธ ์ธ์๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ํฉ๋๋ค!!!
@gaearon
๋น์ ์ ๋งํ๋ค
"์ผ๋ถ ์ด์ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ์ญ์ ํด์ผ ํ ์๋ ์์ต๋๋ค."
๋ค์ polyfill ๋ถ๋ถ์ด ์๋๋ผ ๋ฌธ์ ๊ฐ ์์๋ ๋๋กญ ํธํ์ฑ ๋ถ๋ถ์ด์์ต๋๋ค. ์ํ๊ธฐ๋ก ๋์๊ฐ๋ ๊ฒ์ด ๋ด ๊ฑฑ์ ๊ฑฐ๋ฆฌ์๋ค.
ํ๋ก์ธ์ค์ ๊ดํด์. ์ด๋ฌํ ์ข ๋ฅ์ '๋ฌธ์ '๊ฐ RFC ํ๋ก์ธ์ค๊ฐ ์ค๊ณ๋ ๋ชฉ์ ์ด ์๋๋๊น?
๋ค์ polyfill ๋ถ๋ถ์ด ์๋๋ผ ๋ฌธ์ ๊ฐ ์์๋ ๋๋กญ ํธํ์ฑ ๋ถ๋ถ์ด์์ต๋๋ค. ์ํ๊ธฐ๋ก ๋์๊ฐ๋ ๊ฒ์ด ๋ด ๊ฑฑ์ ๊ฑฐ๋ฆฌ์๋ค.
IE10 ๋ฐ ์ด์ ๋ฒ์ ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ์ ๋ ํนํ IE11์ ๊ณ์ ์ง์ํ๊ณ ์ถ๋ค๊ณ ๋งํ์ต๋๋ค. ํธ๋ํฝ์ ์ฝ 3%๋ฅผ ์ฐจ์งํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๋๋ฌด ์ค๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ 1% ์ปท์คํ๋ณด๋ค ํจ์ฌ ๋ง์ต๋๋ค.
ํ๋ก์ธ์ค์ ๊ดํด์. ์ด๋ฌํ ์ข ๋ฅ์ '๋ฌธ์ '๊ฐ RFC ํ๋ก์ธ์ค๊ฐ ์ค๊ณ๋ ๋ชฉ์ ์ด ์๋๋๊น?
๋ ๊ตฌ์ฒดํ๋๋ฉด RFC๋ฅผ ๊ฒ์ํ ์์ ์ ๋๋ค. ์ด๊ฒ์ ๋๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ๊ฒ๊ณผ ํ ์ ์๋ ๊ฒ๊ณผ ์ฌ์ฉํ ์ ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ๊ฒฐ์ ํ๊ธฐ ์ํด ํ์, ์คํ ๋ฐ ์ค์ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค. RFC(ํฌ๊ด์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ด ํฌํจ๋์ด์ผ ํจ)์ ๋ํด ์๊ฐํ๊ธฐ ์์ํ๊ธฐ์ ์ถฉ๋ถํ ์ธ๋ถ ์ ๋ณด๊ฐ ์ง๊ธ ์์ต๋๋ค.
๋ค, ์ค๋ช ๊ฐ์ฌํฉ๋๋ค!
@gaearon
ํฉ์ฑ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ๊ฑฐํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ฐ๊ฒฐ๋ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ event.currentTarget
์์ ์ด๋ป๊ฒ ์๋ํ ๊น์? ๊ธฐ๋ณธ ๊ฒฝ์ฐ์๋ ํญ์ document
๋ฅผ ์๋ฏธํฉ๋๋ค. ๋๋ React๊ฐ ํด๋น ์์๋ก ์ ํ๋๋ฉด React ๋ฃจํธ๋ฅผ ์๋ฏธํฉ๋๊น?
React๋ ๋จ์ํ ์์ฑ์ ์ค์ ํ๋ ๊ฒ์ด ์๋๋๋ค.
(...)
์ฌ๊ธฐ์ ๋ด ์์ ์ React๊ฐ ๋ด๋ถ์ ์ผ๋ก ์์ฑ์ ์ฌ์ฉํ๋์ง ์์ฑ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
DOM์์ ์ผ์ด๋๋ ์ผ์ ์ํฅ์ ์ค ์ ์๋๋ฐ ์ ์ด๊ฒ์ด ๊ตฌํ ์ธ๋ถ์ฌํญ์
๋๊น? class
/ className
์ ๊ฐ์ ์์ฑ์ ์ด๋ป๊ฒ๋ ๋ฐ์๋๋ ์์ฑ๋ง ์ฐธ์กฐํ์ง ์๋ ํ.
class
/ className
์ฒ๋ฆฌ์ ๋ํ ํผ๋์ React๊ฐ ์์ฑ์ ์ฌ์ฉํ๋์ง ์์ฑ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ฅผ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก ๊ฐ์ฃผํ๋ค๋ ์ฌ์ค๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ Angular ๋ฐฐ๊ฒฝ์ ๊ฐ์ง๊ณ ์๊ณ React๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์์ต๋๋ค. Angular์์ ์์ฑ, ์์ฑ ๋ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฌ์ด์ ๋ถ๋ฆฌ๋ ๊ตฌ๋ฌธ์์ ์ง์ ๋ช
ํํ๊ณ DOM ์์์ props๊ฐ React์ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๋์๋์ง ์ฌ๋ถ๊ฐ ํผ๋์ค๋ฌ์ ์ต๋๋ค. ์์ฑ ๋๋ ์์ฑ.
์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ฐ๊ฒฐ๋ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ event.currentTarget๊ณผ ์ด๋ป๊ฒ ์๋ํ ๊น์? ๋ค์ดํฐ๋ธ์ ๊ฒฝ์ฐ ํญ์ ๋ฌธ์๋ฅผ ์๋ฏธํ๊ฑฐ๋ React๊ฐ ํด๋น ์์๋ก ์ ํ๋๋ฉด React ๋ฃจํธ๋ฅผ ์๋ฏธํฉ๋๊น?
๋๋ ์์ง ๋ชจ๋ฅธ๋ค. :-) ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ๋ณผ ๊ฒ์ ๋๋ค. ์ด ์ค ์ผ๋ถ๊ฐ ์ ๋๋ก ์๋ํ์ง ์๊ฑฐ๋ ๋ค๋ฅด๊ฒ ๋ํ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด ๊ณํ์ ์ฐ๋ฆฌ๊ฐ ๊ฒํ ํ ๊ณํ์ ๋๋ต์ ์ธ ๊ฐ์์ ํตํฉ ๋น์ ์ ๋๋ค.
DOM์์ ์ผ์ด๋๋ ์ผ์ ์ํฅ์ ์ค ์ ์๋๋ฐ ์ ์ด๊ฒ์ด ๊ตฌํ ์ธ๋ถ์ฌํญ์ ๋๊น? ๊ทธ๊ฒ์ด class/className๊ณผ ๊ฐ์ ์์ฑ์ ์ด๋ป๊ฒ๋ ๋ฐ์๋๋ ์์ฑ๋ง ์ฐธ์กฐํ์ง ์๋ ํ.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ๊ด์ ์์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ์ง ๊ด์ฐฐํ ์ ์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ ๋๋ถ๋ถ์ด ๋ฐ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค(๋น๋ก ๋ด๊ฐ ํ๋ฆด ์๋ ์์ง๋ง).
๋๋ Angular ๋ฐฐ๊ฒฝ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ React๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์์ต๋๋ค. Angular์์ ์์ฑ, ์์ฑ ๋ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๊ฐ์ ๋ถ๋ฆฌ๋ ๊ตฌ๋ฌธ์์ ์ง์ ๋ช ํํ๊ณ DOM ์์์ props๊ฐ React์ ์ํด ์์ฑ์ผ๋ก ์ค์ ๋์๋์ง ์ฌ๋ถ๊ฐ ํผ๋์ค๋ฌ์ ์ต๋๋ค. ๋๋ ์์ฑ.
๋๋ ๋น์ ์ ๊ด์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ์ด ์ฐจ์ด๋ ๋๋ถ๋ถ์ DOM ์์์ ๊ด๋ จ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ์ด๋ค ์์๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ํญ์ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํด์ผ ํ๋ ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์ผ์์ ์ธ ์ ํ ๊ฐ๋ฐ์ ์ค์ ๋ก ๊ฐ์น๊ฐ ์๋ค๋ ์ ์ ๋ํด์๋ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์ฌ๋๋ค์ด ๊ทธ๋ค์ ํผ๋ํ๋ ์ ๋๋ ์ค์ ๋ก ๊ทธ๋ค๊ณผ ๊ทธ๋ค์ง ๊ด๋ จ์ด ์๋ค๋ ์ฌ์ค์ ๋งํด์ฃผ๋ ๊ฒ ๊ฐ์์.
(์ฌ์ฉ์ ์ ์ ์์์ ๊ฐ์ด ํจ์ฌ ๋ ๊ด๋ จ์ฑ ์ด ๋์์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์์๋ ๋ ๋ค ๋๊ฐ์ด ์ง์ํ๋ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ์ ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฝ์ต๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ๊ณณ์์ ๋ ผ์๋์์ผ๋ฏ๋ก ์ ํ๋ฅผ ํผํ๊ณ ์ถ์ต๋๋ค. ์ด ํ ๋ก ์ ๋ค์ ์ฐธ์ฌํ์ญ์์ค โ @robdodson ๊ณผ ๊ฐ์ ์ฌ๋๋ค๋ก๋ถํฐ ์ ์์ด ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ ์กฐ์ฌํ ๊ฒ์ ๋๋ค.)
@๋ค๋์15
์ธ๊ธ๋ ์ ์ฑ
(๋ค๋ฅธ ๊ณณ์์๋ ์ธ๊ธ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค)์ด ์์ผ๋ฉด ์ถ๊ฐ ๊ฐ์ฒด ๋ํผ๊ฐ ์ด๋ค ์์ผ๋ก๋ ๋ณด์์ ์ ์งํ์ง ๋ชปํฉ๋๋ค.
๋๋ ์ฌ์ฉ์๊ฐ dangerouslySetInnerHTML
๋ฅผ ํตํด ์ํํ ์ฌ์ฉ์ ๋ํด ์ถฉ๋ถํ ๊ฒฝ๊ณ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ์ฌ์ฉ์ si๊ฐ ๋ฌธ์๋ฅผ ํ์ธํ๊ณ ์๋ฏธ๋ฅผ ๊ณ ๋ คํ๊ณ ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํ๋ ์์ ์
๋๋ค.
(์๋ง๋ ์ ์ ๋์ง ์์) ๋ฌธ์์ด์ ๊ฐ์ฒด/ํจ์๋ก ๋ํํ ํ์๊ฐ ์๋ค๊ณ ํด์ ๋ํ๋ ๊ฐ์ ์ฌ๊ณ ํ๊ฑฐ๋ ์ญ์ ํ์ง ์์ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ์์ผ๋ก ์๋ํ๋ค๋ฉด ์๋ง๋ { __html }
๊ฐ ์ถฉ๋ถํ ๋ณต์กํ์ง ์๊ณ [{ _html: { __html }]
๊ฐ ํจ์ฌ ๋ ์์ ํ ๊ฒ์
๋๋ค. ์์ ์ ์ํด ๋ฌด์ธ๊ฐ๊ฐ ์ํํ๋ค๋ ๊ฒ์ ๋ช ๋ฒ์ด๋ ๋งํด์ผ ํฉ๋๋ค. ?
๋น์ ์ด ์ ๊ณตํ ํต์ฐฐ๋ ฅ์ผ๋ก ๋๋ ๊ทธ ์ถ๋ก ์ ์ดํดํ์ง๋ง, ์ฐ๋ฆฌ๋ " { __html }
๊ฐ ์ ํ๋ html์ ๋ํ๋" ๊ท์น์ ๋ํ ๋จ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์ด์ค๋ถ ์ธ๋ถ์ ๋๊ตฌ์๊ฒ๋ ์ ์ฉ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ํญ์ ๊ทธ๊ฒ์ด API์ ๋ ๋ค๋ฅธ ์ฅ์ ๋ฌผ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์๊ฐ์ ํ ์ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ด์ ์ข ๋ ์ดํด๊ฐ ๋ฉ๋๋ค.
๋จ์ํ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ญ์ ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ฐ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์ ๋๋ค.
๋๋ ๋จ์ง ๋ฐ์์ด ์ปค๋ฎค๋ํฐ์์ ๊ทธ๋ ๊ฒ ๋ ๋จ์ ์ธ ๋ฐฉ์์ ์ข์ํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๋ฃ๊ณ ์ต๋ํ ํ์ฉํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋๋ ๋ชจ๋ ์ฌ๋๋ค์ด ์ฌ๊ธฐ์ ์ค๊ณ ์๊ฑฐ๋ ๋ง์ง๋ง ๋ฒ์ ์์ React์ ์ ์ฉ๋ ๋ณ๊ฒฝ ์ฌํญ์ด '์ค๋จ'์ด๋ผ๊ณ ์๊ฐํ๋ ๋ฐฉ์์ ์ข์ํฉ๋๋ค. ๊ทธ ์ฌ๋๋ค์ ๋ถ๋ช ํ Angular 2 > 3 > 4๋ฒ์ ๊ฒฝํํ์ง ์์์ต๋๋ค.
๋๋ ๋ณํ๋ฅผ ์ฌ๋ํ๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ className
์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ class
๋ฅผ ๊ตฌ์กฐํํ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ํฌ๋ค์ด ๋ฌด์์ ์๊ฐํด ๋ผ์ง ๋ณด๊ณ ์ถ๋ค.
์ด ํ ๋ก ์ ๊ณ์ ์ฃผ์ ๋ก ํ๊ณ ์ถ์ต๋๋ค. ์ํํ HTML์ ์ค์ผ์ํค๋ ๊ฒ์ด ๋์์ด ๋๋์ง ์ฌ๋ถ๋ ํฅ๋ฏธ๋กญ์ง๋ง ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋๋ ๋ฆฌ์กํธ๋ฅผ ์ฌ๋ํ๋ค
์ด๊ฒ์ ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ๋ ํ์๋ฐ๋๋ค๊ณ ๋๋ผ๋๋ก ๋์ธ ์ ์๋ ์๋ฒฝํ ๊ธฐํ์ ๋๋ค. ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ ๋งค์ฐ ๊ธฐ์ฉ๋๋ค.
์ฌ๋๋ค์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ๊ตฌ์กฐํ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ๊ณผ ํจ๊ป ์๋ํ์ง ์๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ๋ถ์ ์ ์ธ ์ํฅ์ด ์์ต๋๋ค.
@gaearon 2c๋ฅผ ๋์ง์ง๋ง ์ด ๋ ๊ฐ์ง ๋ถ์ ์ ํ์ฌ ๋ถ์ ๋ณด๋ค ํฌ๊ฑฐ๋ ์ปค ๋ณด์ ๋๋ค(์ผํ์ฑ ํ์ต ํด๋์ค์ ์์ ๋น์ฉ => className ๋ ํญ์ ๊ตฌ์กฐํ ๋ฐฉ์ง + ์ํ๊ณ ์์ค ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ).
๋ฐ์:์ฌ์ฅ:
์์ @natew ๋ฅผ ๋ฐํฅ:
@gaearon 2c๋ฅผ ๋์ง์ง๋ง ์ด ๋ ๊ฐ์ง ๋ถ์ ์ ํ์ฌ ๋ถ์ ๋ณด๋ค ํฌ๊ฑฐ๋ ์ปค ๋ณด์ ๋๋ค(์ผํ์ฑ ํ์ต ํด๋์ค์ ์์ ๋น์ฉ => className ๋ ํญ์ ๊ตฌ์กฐํ ๋ฐฉ์ง + ์ํ๊ณ ์์ค ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ).
์ด์จ๋ className
์์ class
๋ก ๋ณ๊ฒฝํ ๋๊ธฐ๋ ๋ฌด์์
๋๊น?
๋ด๊ฐ ์ ์ ์๋ ํ ๊ทํ์ ์๊ฒฌ์ ๋ ๊ฐ์ง ์ฃผ์ฅ์ผ๋ก ์์ฝ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๊ฐ๋ ์ ์ผ๋ก ๋ ๊ฐ๊น์ต๋๋ค.
์ข์ต๋๋ค. ํ์ง๋ง Name
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฐ์ฅ ์์ ์ฅ์ ๋ฌผ์
๋๋ค. className
์ฌ์ฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ React๋ฅผ ๋ฐฐ์ฐ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ถ๋ถ์ด์์ต๋๋ค. ๋จ์ ์ด ์๋ ์์ ๋จ์ ์
๋๋ค. ์ค์ ๋ก๋ 4๊ฐ์ ์บ๋ฆญํฐ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ณต๋๋ ์ด๋ค ๋ถํด ๋์๋ณด๋ค ์ธ์ง ์ค๋ฒํค๋๊ฐ ํจ์ฌ ์ ์ต๋๋ค.
๋๊ตฐ๊ฐ์๊ฒ ์ฒซ ๋ฒ์งธ React ๊ตฌ์ฑ ์์์ ์คํ์ผ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์น๋ ๊ฒ์ ์์ํด ๋ณด์ธ์.
function Button({ color, ...rest }) {
const buttonClass = rest.class + ' Button-' + color;
return <button {...rest} class={buttonClass} />
}
๋ด ๋ฉ์ฒญํ ๋จธ๋ฆฌ๊ฐ ํญ๋ฐํ์ ๊ฒ์
๋๋ค.
API์ ์ํธ ์์ฉํ ๋ ์ฌ๋๋ค์ API๊ฐ ์๋ฃจ์
์ ์ ๊ณตํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ClassName์ ๊ธฐ๋ณธ ์ ๊ณต ์๋ฃจ์
์
๋๋ค. ํด๋์ค๋ ๊ธฐ๋ณธ ์ ๊ณต ๋ฌธ์ ์
๋๋ค.
์ ์ ํ์ดํ
ํ 4๊ธ์ 8^) . ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๊ฐ ํ์ฌ className
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์์ฃผ class
๋ฅผ ๊ตฌ์กฐํํ๋๋ผ๋ ์ฐ๋ฆฌ๊ฐ ํ ๋ ํจ์ฌ ๋ ๋ง์ ํ์ดํ์ ํฉ๋๋ค. ๊ทธ๋์ ์ ๋ 4๊ฐ์ ๋ฌธ์๋ฅผ 12๋ฒ ๋ ์
๋ ฅํ์ง๋ง class
์ ๋ถํดํ ๋๋ง๋ค 50๊ฐ์ ๋ฌธ์๋ฅผ ๋ ์ถ๊ฐํ์ต๋๋ค. ์ด๊ฒ์ ๋จ์ง ์ด๋ฆฌ์์ ์ผ์
๋๋ค.
๋ด๊ฐ ๋์น ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๋ ๋ค๋ฅธ ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๊น?
๋๊ธฐ๊ฐ DOM ์์ฑ/์์ฑ ์ค์์ ๋ํ ์ผ์ข
์ ์ฐ๋ ค์
๋๊น?
๊ทธ๊ฒ์ ๋์๊ฒ ๋๋ฌด ํ๋ฌธ์ ์ธ ์ฃผ์ฅ์ฒ๋ผ ๋ณด์
๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ด๋ฌํ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ ์์ง ๋ชปํ๋ฉฐ ๊ทธ๋ด ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ค๋ ์ถ์๋๋ฉด React๋ className์ผ๋ก ๋ณ๊ฒฝํ๋ ๋์ class
๋ฅผ ํ์ฉํฉ๋๊น?
๋๋ ๊ทธ๊ฒ์ด ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๋ค.
React๋ ํ์ฌ ์คํ ์์ค๊ฐ ์๋์์ผ๋ฉฐ 1๋
ํ์ ์คํ ์์ค๋ก ์ ๊ณต๋๋ค๋ฉด ๊ทธ ๋น์ ๋ค๋ฅธ ๊ฒฐ์ ์ด ๋ด๋ ค์ง ์ ์์ต๋๋ค.
๋๋ก๋ ๋ชจ๋ ์ฃผ๋ฆ์ ๋ค๋ฆผ์งํ๋ ๊ฒ๋ณด๋ค ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ React๊ฐ ์ฒ์๋ถํฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ํด๋์ค๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ด๋ฅผ className์ ์ฌํ ๋นํ๋ ๋ฐ ์ต์ํด์ก์ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ ์์ ์ด ์ด ์ผ๋ก ์ด๋ ๊ฒ ํ๋ฅผ ๋ผ ์ค์ ๋ชฐ๋๊ธฐ์ ๋ฌด๋กํ๊ฑฐ๋ ๋ชจ์์ ์ด๊ฑฐ๋ ๋น๋ฐฉํ๋ ๋ด์ฉ์ด ์์๋ค๋ฉด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋๋ ๋น์ ์ด React์์ ํ๋ ๋ชจ๋ ์ผ๊ณผ Twitter์์ ์ ๊ณตํ๋ ๋ชจ๋ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ธํฐ๋ทฐ์์ ๋ด๊ฐ ์ ๊ณตํ ๋ช ๊ฐ์ง ๋ต๋ณ์ ๋ณํธํ๊ธฐ ์ํด ๋น์ ์ ํธ์์ ์ฌ์ฉํ์ต๋๋ค.
๋ง์์ด ๋ฐ๋๊ธฐ๋ฅผ dan.church ์ ๊ธฐ๋ํฉ๋๋ค.
react๋ฅผ ์ง์์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์์ด์ ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. react๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ก์ vue์ ์ถ์๋นํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ className-> class์ ๊ณผ์ ์ ๊ณ ํต์ค๋ฌ์ธ ๊ฒ์ ๋๋ค.
๋๋ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ์ํด className -> class
์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ง๋ง ํ์ฌ๋ก์๋ ๋ช
ํํ ๋๊ธฐ๊ฐ ์์ต๋๋ค. className
๋ DOM์ ์กด์ฌํ์ง๋ง htmlFor
์ ๊ฐ์ด ์๋ฌด๋ฐ๋ ๋์ค์ง ์๋ ์์ฝ๋ prop ์ด๋ฆ์ด ์์ต๋๋ค. ์ด๋ฆ์ ๋ฐ๊ฟ ๋ ์ฐ์ ์์๋ฅผ ์ง์ ํด์ผ ํ๊ณ ํ
์คํธ ์ญํ ์ ํ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ ํผ์ง ๊ฒ ๊ฐ์ต๋๋ค.
@sonhanguyen htmlFor๋ ๊ณต์ ์น API ์ด๋ฆ์ด๊ธฐ๋ ํฉ๋๋ค. https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/htmlFor
@allan2coder ๋ฐฐ์ด๋ก ๋ํํ๋ ๋์ <React.Fragment>
๋๋ <>
๋ก ๋ํํฉ๋๋ค.
@allan2coder ๋ํ ์ด ์ค๋ ๋๋ฅผ ์ฃผ์ ๋ก ์ ์งํ์ญ์์ค. ์ํ๋ ๊ฒฝ์ฐ ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ฌ ์ง๋ฌธํ ์ ์์ต๋๋ค.
์์กด์ฑ์ ํจ์นํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ํจํค์ง์ธ patch-package
์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ์ถ์ต๋๋ค(์: ์ง์๋์ง ์๋ React API ์ฌ์ฉ์ ์ค์งํ๊ธฐ ์ํด). ํ์คํ ์ด๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ณด๋ค ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์ ๋ ์ ์ฉํ์ง๋ง @philipwhiuk ์ ์ฐ๋ ค ์ฌํญ ์ค ์ผ๋ถ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ๋ํ๊ณ ์์ด์.
์ ๋จ์ด์ ๊ฒฝ์ฐ onChange ์ด๋ฒคํธ๋ฅผ ๋ค์ดํฐ๋ธ ์ด๋ฒคํธ์ ๊ฐ๊น๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ์์ผ๋ก ์ฌ์ฉํ์ง ์์์ง ๊ถ๊ธํฉ๋๋ค.
@๋ฌด์ค์ค
๋ฌธ๊ตฌ์ ๋ฐ๋ฅด๋ฉด onChange์ ํ์ฌ ๋์์ ์ ์งํ ๊ณํ์ด ์์ต๋๋ค. ๋ณ๋ก ์๋ฏธ๊ฐ ์์ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก React๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ ์ด์ด๊ฐ ์๋๋ฉฐ ๊ทธ๋ ๊ฒ ๋์ด์๋ ์ ๋ฉ๋๋ค.
ํ์ฌ onChange๋ ์ ๋ ฅ + ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ์๋ฎฌ๋ ์ดํธํฉ๋๋ค. ๋ณ๊ฒฝ ์ด๋ฒคํธ๊ฐ ์ด๋ฏธ DOM์ ์กด์ฌํ๊ณ ๋์ผํ ์๋ฏธ๋ฅผ ๊ฐ์ง ์๋๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค: https://developer.mozilla.org/en-US/docs/Web/Events/change
@jxub
์ฝ๊ฐ ์คํํ์ด์ง๋ง (๋ด๊ฐ ์๋ ํ) ์๋ฌด๋ HTML ์์ฑ์ ๋งคํํ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ผ๋ก React๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด html/css/svg -> jsx ๋ณํ๊ธฐ๋ฅผ ๋ง๋ค ์๊ฐ์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ค์ ์ฌํ ์ผ์ ๋๋ค. ๋ฆฌ์กํธ ์ํ. ๋๋ถ๋ถ ์ฐพ๊ธฐ ๋ฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๋ญ๋น๋์์ต๋๋ค.:(
๋ค๋ฅธ ํธ์ง๊ธฐ์ ๋ํด์๋ ๋ชจ๋ฅด์ง๋ง IntelliJ IDEA(๋ฐ WebStorm, PhpStorm ๋ฑ)๋ HTML ์ฝ๋๋ฅผ JS์ ๋ถ์ฌ๋ฃ์ ๋ ์ด ๋ณํ์ ์ํํฉ๋๋ค.
์ฝ๊ฐ ์คํํ์ด์ง๋ง (๋ด๊ฐ ์๋ ํ) ์๋ฌด๋ HTML ์์ฑ์ ๋งคํํ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ผ๋ก React๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด html/css/svg -> jsx ๋ณํ๊ธฐ๋ฅผ ๋ง๋ค ์๊ฐ์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ค์ ์ฌํ ์ผ์ ๋๋ค. ๋ฆฌ์กํธ ์ํ. ๋๋ถ๋ถ ์ฐพ๊ธฐ ๋ฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๋ญ๋น๋์์ต๋๋ค.:(
์ค์ ๋ก ์กด์ฌํ์ง๋ง ๊ฝค ์ค๋๋์๊ณ ์์ ํ ์ ํํ์ง๋ ์์ต๋๋ค. https://magic.reactjs.net/htmltojsx.htm
์ฐ๋ฆฌ๋ ๊ทธ ๋ ธ๋ ฅ์ ๋์ด๋ ค์ผ ํฉ๋๋ค. ๋์์ด ํ์ํ๋ฉด https://github.com/reactjs/reactjs.org/issues/484๋ฅผ ์ํํ์ญ์์ค. ์ง๊ธ๊น์ง ์๋ฌด๋ ๋์์ฃผ๊ฒ ๋ค๊ณ ์ ์ํ๊ณ ํ์ ์กฐ์น๋ฅผ ์ทจํ์ง ์์์ต๋๋ค.
์ค์ ๋ก ์กด์ฌํ์ง๋ง ๊ฝค ์ค๋๋์๊ณ ์์ ํ ์ ํํ์ง๋ ์์ต๋๋ค. https://magic.reactjs.net/htmltojsx.htm
์ ๋ ์ด๊ฒ์ ์ ์๋ ๋ง์ด ์ฌ์ฉํ์ต๋๋ค. HTML/CSS๋ ์์ง๋ง JavaScript๋ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์๊ฒ ํน์ ๊ตฌ์ฑ ์์๋ฅผ ์์์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ์ผ๋ฐ์ ์ ๋๋ค.
๋ฐ๋ผ์ ์ด๊ฒ์ด ์ฌ๋๋ค์ด ์ค์ ๋ก ์ฌ์ฉํ๋ ์ ์ฉํ ๋๊ตฌ๋ผ๋ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์จ๋ผ์ธ์ ๋ค๋ฅธ ๋ณํ๊ธฐ๋ ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ ๋จ๋ฐฉํฅ(๋ฐ์์ผ๋ก๋ง ๋ง์ด๊ทธ๋ ์ด์ )์ด๋ผ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๊ทธ ๋ฌธ์ ๋ React์๋ง ์๋ ๊ฒ์ ์๋๋๋ค.
์ผ์ด ํจ์ฌ ์ฌ์์ง๊ธธ ๋ฐ๋๋๋ค...
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ ๋จ๋ฐฉํฅ(๋ฐ์ํ๊ธฐ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ๋ง)์ด๋ผ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๊ทธ ๋ฌธ์ ๋ React์๋ง ์๋ ๊ฒ์ ์๋๋๋ค.
์์? ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ํจ์ฌ ๋ ์ฌ์์ผ ํฉ๋๋ค. ReactDOMServer.renderToString
๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค.
๋ฆด๋ฆฌ์ค๋ฅผ ์ฐธ์์ฑ ์๊ฒ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
@gaearon
์์? ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ํจ์ฌ ์ฌ์์ผ ํฉ๋๋ค. ReactDOMServer.renderToString์ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ค, ๋ฌธ๋งฅ์ ๋ ผ์๋ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. html/css๋ฅผ ์์ฑํ๊ณ JavaScript๋ฅผ ์ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ด ๊ตฌ์ฑ ์์์ ๋งํฌ์ /์คํ์ผ/๋ ์ด์์์์ ์์ ํ ์ ์๋๋ก JS ์ฝ๋์์ ์์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ง๊ธ ๋น์ฅ ํ ์ ์๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ html/css๋ก ๊ฐ๋ฐํ๊ณ htmltojsx๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ๊ฝค ์ ์๋ํฉ๋๋ค.
๋ฌธ์ ๋ ์ด์ React์์ ๋ชจ๋ ๋งํฌ์ /์คํ์ผ/๋ ์ด์์ ๋ณ๊ฒฝ์ ์ง์ ์ ์งํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
ReactDOMServer.renderToString
๋ฅผ ํธ์ถํ๋ฉด ์ค์ ๋ก ์ ์ HTML์ ์ป์ ์ ์์ง๋ง ํด๋น HTML์๋ ๋ชจ๋ ์ค์ ๊ตฌ์ฑ ์์ ์ฝ๋๊ฐ ๋๋ฝ๋์ด UI ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ณ ์ถ๋ ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ด ๋
ผ๋ฆฌ.
react-sketchapp๊ณผ ๊ฐ์ ๊ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ด์ง๋ง ์ผ๋ฐ html/css๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ด ์์ ์ ์ํํ ์ ์๋ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด - ์ผ๋ถ ํํ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํตํด ์์์ ๋ฐ์ ID๋ฅผ ์ ์งํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ReactDOM ์ฝ์ด์ ๋ฒ์์ ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์์ ํ ์ดํดํ์ง๋ง ํ์คํ ๊ทธ ์์ญ์ ์๊ณ ํฅ๋ฏธ๋ก์ด ๋ฌธ์ ์ ๋๋ค.
์ด๊ฒ์ ๋์ ์ฐ์ ์์๊ฐ ์๋๋๋ค. ์ ๋ ์ฃผ๋ก htmltojsx๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ปจํ ์คํธ ์ธ๋ถ์์๋ ์ฐ๋ฆฌ ์ค ์ผ๋ถ์๊ฒ ์ ์ฉํ ์ด์ ๋ฅผ ์ค๋ช ํ๊ณ ์ถ์์ต๋๋ค. :)
html/css๋ฅผ ์์ฑํ๊ณ JavaScript๋ฅผ ์ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ด JS ์ฝ๋์์ ์์ ํ ๋งํผ ์ถฉ๋ถํ ๊ตฌ์ฑ ์์์ ๋งํฌ์ /์คํ์ผ/๋ ์ด์์์์ ์์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด๊ฒ์ ์ผ๋ง๋ ํฐ ๋ฌธ์ ์ด๋ฉฐ, ๊ทธ๋ค์๊ฒ ์ฝ๊ฐ์ JSX๋ฅผ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ธ๊น์? ์ด์จ๋ ๋ณ๊ฒฝ ์ฌํญ์ React์ ์ ํตํ ์์ง๋์ด๊ฐ ๊ฒํ ํด์ผ ํฉ๋๋ค.
๋๋ฌด ์ฃผ์ ๋ฅผ ๋ฒ์ด๋๋ฉด ์ฃ์กํ์ง๋ง ์์ฆ์๋ HTML/CSS๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
( @gaearon ์์ ์ด๋ฏธ ์ฝ๊ฐ์ OT ๋๊ธ์ ๋ํ ๋ต๋ณ์ด๋ฏ๋ก ์๋๋ฝ๋ค๋ฉด ์จ๊ธธ ์ ์์ต๋๋ค.)
์ด๊ฒ์ ์ผ๋ง๋ ํฐ ๋ฌธ์ ์ด๋ฉฐ, ๊ทธ๋ค์๊ฒ ์ฝ๊ฐ์ JSX๋ฅผ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ธ๊น์? ์ด์จ๋ ๋ณ๊ฒฝ ์ฌํญ์ React์ ์ ํตํ ์์ง๋์ด๊ฐ ๊ฒํ ํด์ผ ํฉ๋๋ค.
๊ธ์, ๊ทธ๊ฒ์ ๋ค์์ด ํ์ํฉ๋๋ค:
className
, key
์๋ฏธ ๋ฑ์ ๊ฐ๋ฅด์ณ์ฃผ์ธ์.์ด์ ์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ react-skeptchapp๊ณผ ๊ฐ์ ๊ฒ์ UI ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด์ง๋ง ์ฌ์ ํ ๋ง์ ๊ฒ์ ๋ฐฐ์์ผ ํฉ๋๋ค.
๋๋ ๋น์ ์ด ์ด๊ฒ์ ๋ฌป๋ ์ด์ ๋ฅผ ์์ ํ ์ดํดํ๊ณ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ธ์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค (๋๋ ์์ฌ๋ฉ๋๋ค). ์ด์จ๋ ๋๋ ๊ทธ๊ฒ์ด ReactDOM์ ํต์ฌ์ ๋ฏธ๋๋ฅผ ์ํ ๋ฒ์๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ์ฃผ์ ์์ ๋ฒ์ด๋ฌ์ต๋๋ค :-) ํธ์ํฐ๋ ๋ค๋ฅธ ๊ณณ์์ ์ด ํ ๋ก ์ ๊ณ์ํฉ์๋ค.
"๋๊ตฌ๊ฐ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณด๋ ํ๋์ ๋๊ตฌ๊ฐ ๊ถ์ฅํ๋ ํ๋์ ๋๋ค"
~ ๊ฒ๋ฆฌ ๋ฒํํธ
React๊ฐ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๋๋ถ๋ถ์ด React API์ ์ผ๋ถ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋๊ฐ ํผ๋์ค๋ฌ์ํ๊ณ ์ข์ ํ๋ ์ด์ ๊ฐ์ ํ ๋ก ์ ์ด๋ํ๋ ๋ง์ ํจ์ ์ ์ด๋ํฉ๋๋ค. class
์ ๊ฐ์ ์์ฝ ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด javascript, html ๋๋ react ์์ฒด ๋๋ฌธ์ ๋์ ๊ฒ์
๋๊น?
16.3์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ผ๋ก ๋์๊ฐ์(์ ๊ธฐ์ต์ด ๋ง๋ค๋ฉด) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ vdom์ ์ํด ๋ ๋๋ง๋๋ ๊ธฐ๋ณธ html ์์์ ์ ๋ฌ๋ ๋ชจ๋ ์์ฑ์ ์๋ฝํ์ฌ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด ๋ช ๋ฐฑํ ๋์ ํจํด ์ ๊ตฌํํ ํ๋์
<div {...this.props} />
๊ทธ๋์ ๋๋ Dan์ด ์ฐ๋ฆฌ๊ฐ ์ด ๋์ฐํ ์ฝ๋๋ฅผ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค์ ๊ณ์ ํผ๋จ๋ฆด ๊ฒ์ ์ ์ํ๋ค๋ ์ฌ์ค์ ์๋นํ ์ค๋งํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
์ฐ์ , props
์ ๋ด์ฉ์ ๋ํ ๋ณด์ฅ์ ์์ง๋ง ์ฒ์์๋ ๊ธฐ๋ณธ html ์์์ ์๋ชป๋ ์ํ์ ์ ๋ฌํ๋ฉด ๊ฑฐ์ ํญ์ ์์๋๋ก ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋ถ๋ชจ ์ํ์ ์์ ๊ตฌ์ฑ ์์๋ก ์ ํํ๋ ๊ฒ์ด ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง๋ง ์ค์ ๋ก๋ ๋งค์ฐ ๊ฒ์ผ๋ฆ
๋๋ค.
<Child {...props} />
const Child = (props) => <div {...props} />
๋๋๋ก ๋น์ ์ ๋น์ ์ด ๋ฌด์์ ๋ ๋๋งํ๊ณ ์๋์ง์กฐ์ฐจ ์์ง ๋ชปํ๋ฉฐ ์ด ๋ฌธ์ ๋ ๋ค๋ฃจ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค. ๋ํ ์ ํ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ข ๋ฅ์ ๊ตฌ์ฑ ์์๋ฅผ ์ ํ ๊ฒ์ฌํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์ด๋ ๋๋ถ๋ถ์ ๊ตฌ์ฑ ์์๊ฐ ์๋ก ๊ณต์ ํด์ผ ํ๋ ์ฌ๋ฌ ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๊น์ด ๋ค์ด๊ฐ ์ ์๋ ํ ๋ผ๊ตด์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์์ ํ๊ธฐ ์ํด ๋ฐ์์ ๋ค์ ์์ฑํ๋ฉด ์๋ชป๋ ๊ฒฐ์ ์ ๋ ๋ฐฐ๋ก ์ค์ด๋ ๋์ ์ด๋ฌํ ๋์ ํจํด์ด ์ฝ๋๋ฒ ์ด์ค์ ๋ฏธ์น๋ ํผํด๋ฅผ ๊ทธ ๋ค์ ์๋ ๋์์ด๋๊ฐ ๊นจ๋ฌ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
์ฐ๋ฆฌ๋ jsx๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ ๊ตฌ์ถ๋์๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ "ํน์ด์ฑ"์ ํค์๋ ์ฌ์ฉ์์ ์๋์ ์ผ๋ก ์ธ์ด์ ์ถฉ๋ํ๊ธฐ ์ํ ํ๊ณ๋ก ์ฌ์ฉํ๋ ๊ฒ์ API๋ฅผ ์์ ํ๊ธฐ ์ํ ๋์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ๋๋ค. ์ ์์ ์์ํ๋ ๋์ ์ ์ํ๊ณ ์ถ์ต๋๋ค ์ธ์ด์ ๋ํด ์์ ํ ๋ฉ๋ฆฌ ์ด๋ํ ๊ฒ์ ๋๋ค.
@gaearon ์ค๋๋ง ! :) (ps. ์ฃ์กํฉ๋๋ค tl;dr ์์ผ๋ก)
์ด์จ๋ , ์ ๋ ์ ์์ ์ ๋ชจํ์์ ๋ฐฐ์ด ๊ฒ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๊ณ ์ถ์์ต๋๋ค. ์ฑ๋ฅ/๊ธฐ๋ฅ์ ์ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ ๋๋ง์ "์ต์ํ์" React ํ์๋ฌผ์ ๋ง๋ค์์ต๋๋ค. ์ฒ์์๋ ๊ทธ์ ์ฌ๋ฏธ์๋ ์คํ์ด์์ง๋ง ๋ค๋ฅธ ๋ง์ ์ด์ ์ ํฌํจํ์ฌ ์ด๊ธฐ ๋ ๋๋ง/์ ๋ฐ์ดํธ/์ญ์ ์ ๋ํ ์ค์ ์ฌ๋ก์์ +300% ์ด์์ ์ฑ๋ฅ ํฅ์์ ๋ณด์์ต๋๋ค. ํ๋ง๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค.
IIRC์ ๋ง์ ๋ถ๋ถ์ ๋ชจ๋ React-props ๋ก์ง์ ์ฐํํ๊ณ ๋จ์ํ ์์ฑ์ setAttribute์ ์ง์ , ์คํ์ผ์ style.setProperty์ ์ง์ , ๋ฆฌ์ค๋๋ฅผ addEventListener์ ์ง์ ๊ณต๊ธํ๋ ๋ฑ์ ๋ฐฉ์์ผ๋ก ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ DOM ์์ ์ธํฐํ์ด์ค๋ `{attributes: {}, style: {}, listeners: {}, className: "", ...}์ ๊ฐ์ด ๋ณด์ ๋๋ค. ๋ ์ฅํฉํ์ง๋ง ์ธํฐํ์ด์ค๋ ์ด์ ์๊ณ ๊ตฌํํ๊ธฐ ์ฝ๊ณ ๊ฐ๋จํฉ๋๋ค. ๋งค์ฐ ๋น ๋ฆ ๋๋ค. ์ด๊ฒ์ ์๋ง๋ ๋น์ ์๊ฒ ๋๋ฌด ๊ทน๋จ์ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ ์๊ฒ ์์ฃผ ์ ๋์์ด ๋์์ต๋๋ค.
๋ด๊ฐ ํ๊ณ ์๋ ๊ฒ์ CSS๋ฅผ ์์ ํ ์ญ์ ํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์คํ์ผ์ ์ธ๋ผ์ธ์ ๋๋ค. ์์๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ฉฐ ๋ง์ ์ค์ฉ์ ์ธ ์ด์ ์ด ์์ต๋๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ์ด๊ธฐ CSS ๊ตฌ๋ฌธ ๋ถ์(๋๋๊ฒ๋ ๋น์) ๋ฐ ๋๋ถ๋ถ์ ์ค๋ฒํค๋๋ฅผ ํ์ํ๋ ์ ํ๊ธฐ ์ผ์น ๋น์ฉ์ ํผํ ์ ์์ต๋๋ค. ์ ๋ ฅ์ด ๋ถ์กฑํ ๋ ธํธ๋ถ์์๋ ๋ณต์กํ ๊ณ์ธต ๊ตฌ์กฐ(๋๋ฌด ๊ฐ์ง์น๊ธฐ ์์ด)์์ ์์ ์ ์ธ 60FPS์ ๊ทธ ์ด์์ ์ฝ๊ฒ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๋๋ ๊ทธ ๋๋ถ๋ถ์ด ๋น์ ์๊ฒ ์ค์ ๋ก ์ ์ฉํ์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง ์๋ง๋ ๊ฑฐ๊ธฐ์ ํฅ๋ฏธ๋ก์ด ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค. ์ด์จ๋ HTML+React์ ๋ํ ๋์ ์ฃผ์ ๋ถ๋ง์ React ์ฌ์ฉ์ ๊ตฌ์ฑ ์์๊ฐ CSS์ ์์กดํ์ง ์๊ณ ๋ ์ด์์/ํฌ์ง์ ๋(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์ด๋ ์ ๋ ์ด๋ฒคํธ)์ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ButtonComponent๋ฅผ ๋ง๋ ๋ค์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐ์น๋๊ฑฐ๋ ๋ ์ด์์์ ํตํฉ๋ ์ ์์ต๋๋ค. ๋ด๋ถ์ ๋ชฉ์ ํน์ ๋ก์ง์ ๊ตฌํํ๊ณ , ๋ฐฐ์นํ ์ ์๋ ๋๋ฏธ ์์๋ก ๋ํํ๊ฑฐ๋ ButtonComponent ๋ฃจํธ ์์์ ์ฌ์ฉ๋๋ ์คํ์ผ์ ๋ณํฉ๋๋ ์คํ์ผ ์ํ์ ๋ ธ์ถํฉ๋๋ค. ๊ทธ ์ค ์ด๋ ๊ฒ๋ ์๋ฒฝํ์ง ์์ผ๋ฉฐ ์คํ์ผ์ ์๋ ๊ทธ๋๋ก ๋ณํฉํ๋ฉด ์ ๋๋ ์คํ์ผ์ ์ฝ๊ฒ ๋ฃ์ ์ ์์ผ๋ฏ๋ก ์ํํฉ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ๋ฌธ์ ๋ ๊ตฌ์ฑ ์์ ๊ฒฝ๊ณ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ฑ์ ํ์ ์งํฉ์ด ๊ณต๊ฐ(์์น ์ง์ /๋ ์ด์์)์ด๊ณ ์ผ๋ถ๋ ๋ด๋ถ(์๊ฐ์ ์คํ์ผ ์ง์ )์ฌ์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ํ๋ ๋ ๋ค๋ฅธ ์ผ์ ๊ตฌ์ฑ ์์์ ์ฝํ ์ธ /์์์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด DOM ๊ตฌ์ฑ ์์๋ ์์ ๋ชฉ๋ก์ ์ฌ์ฉํ์ง ์๊ณ ๋์ ์ฝํ ์ธ ์ธ์คํด์ค๋ฅผ ํ์ฉํฉ๋๋ค. ์ฝํ ์ธ ์ธ์คํด์ค๋ ์กฐ์ ๋ ผ๋ฆฌ์ ์์ ๋ ๋๋ง์ ๊ตฌํํ๋ฏ๋ก ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ตฌํ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ฐ์ฅ ๋ช ๋ฐฑํ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋๋ถ๋ถ ์ ์ ๊ณ์ธต ๋ ๋์ ์ผ๋ก ์์ฑ๋ ์์. ๋ฐ๋ผ์ ๋๋ค์๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ๊ณ์ธต ๊ตฌ์กฐ๋ ๋ ๋น ๋ฅธ ๊ฐ๋จํ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ ๋ฐ๋ฉด ๋์ ์ผ๋ก ์์ฑ๋ ์์์ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ ๋ต์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ํ ๋ถํ์ํ ๊ฐ์ ์ฐธ์กฐ ์์ด ํ๋ ์ค๋ฐ์ค ๋ ์ด์์์ ์ง๋ฅ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ "์ปจํ ์ธ ๊ตฌ์ฑ ์์"๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
๊ทธ์ ๊ด๋ จํ์ฌ React๊ฐ ์๋ชป๋์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ์ด๋ฆฐ์ด์ด๋ฉฐ ์์ง ๊ตฌ์ฒด์ ์ธ ๊ฒฐ๋ก ์ด๋ ์๋ฃจ์ ์ ๋๋ฌํ์ง ๋ชปํ์ต๋๋ค. ํ์ง๋ง ๋ ์ง์ ์ฌ์ด์ ๋ชจ๋ ๋จ์ผ ์์๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ๋ฃจํธ์์ ์์์ ์ง์ ์ผ๋ก ์ํ์ ๋ฒ๋ธ๋งํ ์ ์๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ง์น๊ธฐ๋ ์ข ์ข ๋ฌธ์ ๊ฐ ๋๋ค๋ ์ ์์ React์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๊ฐ๋ ฅํ ๋ฏฟ์ต๋๋ค. ์ฑ๋ฅ์ ๋๋ถ๋ถ "์ถฉ๋ถํ ์ํธ"ํ๋ฉฐ React์์ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋์ด ํด๊ฒฐํ ๊ฐ์น๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง์ ์คํ์์ ๋๋ ์์ฃผ ์ ์ ์์ ์ฌ์ํ ์ฝ๋๋ก ์ ์ฒด ๋ฃจํธ ์ ๋ฐ์ดํธ ๋น์ฉ์ ๋จ์ํ ๋ถ์๋ก ์ค์ผ ์ ์์์ง๋ง ๋ด ์ง๊ด์ ๊ทธ๊ฒ์ด React์ ์ฒ ํ์ด๋ ๋จ์ํ ์์ ๋ชจ๋ธ๊ณผ ๊ทธ๋ค์ง ํธํ๋์ง ์๋๋ค๊ณ ๋งํฉ๋๋ค.
๋๋ถ๋ถ ๋น์ ์ ์ํ ๊ฒ์ ์๋์ง๋ง ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฐ ํน์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ์ฉ์ผ๋ก ์ต์ํ์ "๊ธฐ๋ณธ DOM ์์"๋ง ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. ํน์ ์๊ตฌ ์ฌํญ/์ํฉ์ด ์๋ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ๋งค์ฐ ์ ๋ ดํ๊ฒ ๊ฐ๋ฐํ๊ณ "ํดํน"์ ์์กดํ์ง ์๊ณ ์์ ์ ์ ์์ค ํน์ ๋์์ ์ฌ์ํ๊ฒ ํ์ฅ/๊ต์ฒดํ๊ณ ๊ตฌํํ ์ ์๋ค๋ ์์ด๋์ด์ ๋๋ค. -์งํฅ์ฑ, ํน๋ณํ ์คํ์ผ ์ฒ๋ฆฌ ๋ฑ ). ์ด๊ฒ์ ๋ํ ๋ชจ๋ ๊ฒ์ ํฌ๊ดํ๊ณ ๋ชจ๋ ์ฌ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋ ธ๋ ฅํ ํ์ ์์ด DOM ์์ ์ธํฐํ์ด์ค์์ ์๋นํ ๋ ๋จ์ ์ผ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ฌํํผ, ์๋ง๋ ๋๋ถ๋ถ์ ๊ทธ์ ๋ ๋์๋ค๋๋ ๊ฒ์ด๊ณ ๋๋ ์๋ง๋ ๋๋ถ๋ถ์ ๊ฐ๋ ์ ์ ์ ๋ฌํ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์๋ง๋ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ๋๊ตฐ๊ฐ๋ก๋ถํฐ ๋น์ ์ ์ํ ํฅ๋ฏธ๋ก์ด ์ ๋ณด๊ฐ ์์ ๊ฒ์ ๋๋ค. ๋น์ ์ด "๋จ์ํจ"์ ๋ชฉํ๋ก ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ์๋ง๋ ๋น์ ๊ณผ ๊ด๋ จ์ด ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋๊ฐ ์๊ฒ ์ต๋๊น? :)
๋ํ ๋ด๊ฐ ์๊ธฐ ์ ์ ๋ด objectKeyValueReconcile
ํจ์์ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค. ํนํ React์ ์ ์ฌํ ์๋๋ฆฌ์ค์ prev/next props๋ฅผ ๋น๊ตํ๋ ๋ฐ ๋งค์ฐ ๋น ๋ฅด๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ์๊ฒ ์๋นํ ์ค์ ์ฑ๋ฅ ํฅ์์ ๋ํ ์ฑ
์์ด ์์ต๋๋ค.
imho ๋๋ "ํด๋์ค"์์ด๋์ด๋ฅผ ๋จ์ด ๋จ๋ฆด ๊ฒ์ ๋๋ค. JSX๋ ๊ฒฐ๊ตญ ์ฃฝ์ ๊ฒ์ ๋๋ค.
์์ ๊ธฐ๋ฐ์ด ์๋ DOM/์ฐฝ ์ด๋ฒคํธ์ ๋ํ ์ง์์ React DOM์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํ ์๊ฐ์ ๋ฌด์์ ๋๊น? ํฉ์ฑ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ ์ ์์ผ๋ฉด์๋ ์ด๋ฒคํธ ์์ง/์ ๋ฐ์ดํธ/์ผ๊ด ์ฒ๋ฆฌ์ ์ผ๋ถ ํํ๊ฐ ์ฌ์ ํ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํค ๋๋ฅด๊ธฐ, ํฌ๊ธฐ ์กฐ์ ๋ฐ ์ฐฝ ์คํฌ๋กค ์ด๋ฒคํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ๋๋ ์๋๋ฆฌ์ค์ด์ง๋ง https://developer.mozilla.org/en-US/docs/Web/Events ์ ์๋ ๋๋ถ๋ถ์/๋ชจ๋ ๋ชฉ๋ก์ ์ง์ํ ์ ์๋ค๋ฉด ๋์ผํ ์ถ์ํ ๋ค์ ์ ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๊ฐ์ฅ ์ค๋๋ ๊ณต๊ฐ ๋ฌธ์ #285 ๐์์๋ ๋ ผ์๋ฉ๋๋ค.
@gaearon
className
-> class
์ ์ค์ ํจ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
({ className }) => <div className={className} />
๋ ๊ฒ์ ๋๋ค
({ ...rest }) => <div class={rest.class} />
์ด์ ์ ์ ์ ์ผ๋ก ํ๋ฌธ์ ์ด์ง๋ง ์ด ๋ณ๊ฒฝ์ ์๋นํ ๊ณ ํต์ ์ผ๊ธฐํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ปค๋ฎค๋ํฐ์์ ๋น์ทํ ์ผ์ ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ์๋ฅผ ๋ค์ด python3
๊ฐ 10๋
์ ์ ์ฒ์ ์ถ์๋์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ด์ ๋ํด ๋
ผ์ํ๊ณ ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ์ ์๋น ๋ถ๋ถ์ด ์ ํ์ ํ์ง ์์๊ณ ์์ผ๋ก๋ ํ์ง ์์ ๊ฒ์
๋๋ค. ๋ค์ ์๊ฐํด ์ฃผ์ธ์.
@kans
์๋๋ฉด ์ด๊ฑฐ:
props => <div class={props.class} />
์๋ ๊ธฐ๋ฅ๊ณผ ๋น์ทํ ๋ณต์ก์ฑ์ ๋๋ค.
class๋ js์ ํค์๋์ด๊ธฐ ๋๋ฌธ์ className์ด ๋ง์์ ๋ค์์ง๋ง ์ด๋ ์ชฝ์ด๋ ๊ทธ๋ ๊ฒ ํฐ ๋ฌธ์ ๋ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ธ๋๋จธ๋ฌ์คํ ์คํ์ผ๋ง์ ์ ํธํ๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ๋ ๋ถ๋ถ์ ์๋๋ค. ๋๋ ์๋ง๋ ์ง๋ ๋ช ๋ ๋์ className์ ์์ญ ๋ฒ ์ฌ์ฉํ์ ๊ฒ์ ๋๋ค?? ๊ฑฐ์ ์๋ค.
class
์ ์ฐฌ์ฑํ๋ ํ ๊ฐ์ง ์๊ฐ์ ์ค์ ๋ก className์ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด css๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ class
์ html/css ๋ชจ๋ธ์ ๊ธฐ๋ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด prop์ ์๋์ ์ธ ์ฃผ์ ๋ชฉ์ ์ ์ค์ ๋ก css ์ฝ๋์ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด html/css ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ฒ๋ผ ํด๋์ค๋ผ๊ณ ๋ถ๋ฅด์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๋์์ธ ์์คํ
์ฝ๋ ์ธ๋ถ์ IMO, ์ ๋ง ๊ด์ฉ์ ์ธ React ๊ฐ๋ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ด์จ๋ className ๋๋ class๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์์ต๋๋ค. CSS์ฉ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ ๋ช ๊ฐ์ง ์์ UI ๊ตฌ์ฑ ์์์ ๊ฒฉ๋ฆฌ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์์ ์ฌ์ฉ๋๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด ๋ ๋์ ์์ค์
๋๋ค(์: <Columns verticalAlign="center">
๋๋ <BodyText />
).
๊ทธ๋์ className
์์ class
๋ก ์ด๋ฆ์ ๋ฐ๊พธ๋ฉด ์ด์จ๋ prop์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ๋ ์ฝ๊ฒ (React ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์ปจํ
์คํธ๋ฅผ ์ ํํ๊ณ ํ๋ฅผ ๋ด์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ฑ), ์ด๋ฆ์ ๋ฐ๊พธ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๋ฌถ์ ํฌ๊ธฐ๋ฅผ ์ค์ด์ญ์์ค.
์ด๊ฒ์ ํฌ๊ณ ์ค์ํ ์ ๋ฐ์ดํธ์ด๋ฏ๋ก React ์๋ช ์ฃผ๊ธฐ ์ด๋ฆ๋ ์์ ํ ์ ์์ต๋๋ค!
์๋ฅผ ๋ค์ด shouldComponentUpdate
=> shouldUpdate
๋ฑ. ์ด ์ด๋ฆ์ ์ด๋ฆฌ์์ ๊ฒ์ด ์๋๋๋ค.
@AlexGalays
์ด๊ฒ์ ํฌ๊ณ ์ค์ํ ์ ๋ฐ์ดํธ์ด๋ฏ๋ก React ์๋ช ์ฃผ๊ธฐ ์ด๋ฆ๋ ์์ ํ ์ ์์ต๋๋ค!
์ฆ shouldComponentUpdate => shouldUpdate ๋ฑ. ์ด ๋ช ๋ช ์ ์ด๋ฆฌ์์ ์ผ์ ๋์ด์ ๊ฒ์ ๋๋ค.
๋ ๊ธด ์๋ช ์ฃผ๊ธฐ ํํฌ ์ด๋ฆ์ ๊ฒ์ ์ ๋ ๋ชจํธํฉ๋๋ค. ๋ ์งง์ ์ด๋ฆ์ ๋๋ฌด ์ผ๋ฐ์ ์ด๊ณ ํด๋น ์ด๋ฆ์ด ์์นํ ์ปจํ ์คํธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฏ๋ก ์ฐ์ฐํ ๋ค๋ฅธ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ์ผ์นํ ์ ์์ต๋๋ค(๊ฐ์์ฑ ์ผ์น).
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ React ์ฝ์ด์ ์ผ๋ถ์ด๋ฉฐ ์ด ๋ฌธ์ ๋ ์ ์ ์ผ๋ก react-dom์ ๊ดํ ๊ฒ์ ๋๋ค.
@ljharb
์ ๋ง์ด์ง!
@sompylasar
์ฃ์กํฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ํ ์ข์ ์ด์ ๊ฐ ์๋๋๋ค(๋ง์ฅ๋ ์๋, reasonReact๊ฐ ๋ฉ์๋ ์ด๋ฆ์ ์์ ํ์ต๋๋ค :)). ์ฐ๋ฆฌ๋ ํจํค์ง ์ด๋ฆ์ผ๋ก ๋ชจ๋ ๋ชจ๋์ ์ ๋์ฌ๋ฅผ ๋ถ์ด์ง ์๊ณ ์ ์ฐพ์ต๋๋ค. ์ด์จ๋ , react-core๋ ์ด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ์ด์ผ๊ธฐ๋ ๊ทธ๋งํ๊ฒ ์ต๋๋ค.
์ด๋ฌํ ๋ณํ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ง์ถค ์์ ์ํธ ์ด์ฉ์ฑ์ ์ผ๋์ ๋๊ณ ๊ตฌํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ ๋ก ์ ์ผ๋ถ๋ฅผ ํฌ๋ผ(https://discuss.reactjs.org)์์ ๋ณ๋์ ์ค๋ ๋๋ก ์ฎ๊ธธ ๊ฐ์น๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. GitHub ๋ฌธ์ ๋ ํฌ๋ผ ๊ฒ์๋ฌผ์ฒ๋ผ ์ค๋ ๋๋์ง ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ฌธ์ ์์ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ๋ ผ์ํ๊ธฐ๊ฐ ๊น๋ค๋กญ์ต๋๋ค.
className -> class
์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฅ๋ฏธ๋กญ๊ฒ ๋ณด์
๋๋ค ๐บ
2019๋ React ํ๋ก์ ํธ ๋ณด๊ธฐ
const {
class: className, // YouKnowIamRight PepeHands
someFancyProp,
...restProps
} = props
๋๋ ์ด๊ฒ์ด ํ์คํ ์ค๋ ๊ฒ์ ๋ณธ๋ค.
HTML์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๊ณ className
๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ฒ์ ์ ๋ง ์ข์ํ์ง๋ง ๋์์ class
์์ฝ ํค์๋๊ฐ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค.
์ด ์์ ์์ ์ ๋ className์ ๋ํด ๊ฐํ ์์ง๋์ด๋ง ๋ฌธ์ ๊ฐ ์๋ ํ className
๋ฅผ ๊ณ ์ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค(๊ฐ์ธ ์ทจํฅ์ด ์๋).
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋์ ์ค์ฉ์ ์ธ ์๊ฐ์ผ ๋ฟ์ ๋๋ค.
class
์๋ณ์๋ฅผ ํ๊ดดํ ์ ์๋ค๋ ์ถ๊ฐ์ ์ธ ๋ง์ฐฐ์ ์ดํดํ์ง๋ง, ์ด ์ค๋ ๋์ ๋๋ฌด ๋ง์ ์ฌ๋๋ค์ด ํด๋์ค ์ด๋ฆ์ ์ํ์ผ๋ก ๋ฐ์์ผ ํ๋ ํ์๋ฅผ ๊ณผ๋ํ๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
className
๋ฅผ React ๊ตฌ์ฑ ์์(๋จ์ํ DOM ์์๊ฐ ์๋)์ ์ ๋ฌํ๋ค๋ ๊ฒ์ ์๋ก์ด ์ถ์ํ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ์์ฃผ ์์ ๋น๋ฉ ๋ธ๋ก์ ๋ง๋ค๊ฑฐ๋ ํด๋น ๊ตฌ์ฑ ์์๊ฐ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ผ๋ถ๋ฅผ ๋
ธ์ถํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ(์: <Button />
๊ตฌ์ฑ์์) ์์๋ @gaearon ์ ์์ ๋ฅผ ๋ฐ๋ฅด๊ณ props์ "๋๋จธ์ง"๋ DOM ์์๋ก ์ ๋ฌํ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ ๋ง์ฐฐ๋ก ์ธํด ์์
์ ํผํ๊ณ ๋ ๋์ ์๋ฃจ์
์ ์ฐพ๊ฒ ๋ ์ ์์ต๋๋ค.
๋ด ๊ฒธ์ํ ๊ฒฝํ์์, ๋๋ className
๋ฐ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ ๊ฒ์ ๊ธฐ์ตํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ด JSX์ ๋ถ์ฌ๋ฃ๊ธฐ HTML์ ๋ณต์ฌํด์ผ ํ์ต๋๋ค( class
๋ฅผ className
๋ก ๋์ฒด).
๋ชจ๋ ์ํ์ HTML๋ก ํผ๋จ๋ฆฌ๋ ๊ฒ์ ์ํฐ ํจํด์ ๋๋ค. ๋ฏธ๋์ ๋๊ตฐ๊ฐ๊ฐ HTML ์์ฑ๊ณผ ์ผ์นํ๋ ์ถ๊ฐ ์ํ์ ํฌํจํ๋ฉด ์๊ธฐ์น ์๊ฒ ๋์์ด ๋ณ๊ฒฝ๋ฉ๋๋ค. IE๊ฐ ์ ์์ฑ์ ์ถ๊ฐํ๋ฉด ํธ์ค๊ฐ ์กํ๋๋ค.
@philipwhiuk ์ฌ์ฉํ์ง ์๋ ์ํ๋ง ํผ๋จ๋ฆฌ๋ฉด ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
@j-f1
์ฌ์ฉํ์ง ์๋ ์ํ๋ง ํผ๋จ๋ฆฌ๋ฉด ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ค๋ง. ๊ตฌ์ฑ ์์ API์ ์ ์ต์ ์ ์ถ๊ฐํ๋ฉด ์ด ์ต์ ์ด ๊ธฐ๋ณธ DOM ๋ ธ๋๋ก ์ ๋ฌ๋์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ๋ ์์์ ์ค์ ๋ ์ ํํ ์์ฑ์ ์์กดํ ์ ์์ผ๋ฉฐ ๊ทธ๋ฐ ๋ค์ ๊ทธ ์ฌ๋์ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ props๋ฅผ ์๋์ ๋ชจ๋ ํญ๋ชฉ์ ํผ๋จ๋ฆฌ๋ ๊ฒ์ ๊ตฌ์ฑ ์์ API์ ์ถ๊ฐ๋๋ ๋ชจ๋ ๊ฒ์ด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์์ ์๋ฏธํฉ๋๋ค.
Btw, class
์ ๊ฐ์ ๋ถํดํ์ง๋ง ๊ทธ ์ธ๋ถ ์ฌํญ์์ ์๋ฆฌ์ง ์๋ ์์์ ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋ง์ ๋ถ๋ค์ด (๊ทธ๋ ์ต๋๋ค) ์ถ๊ฐ ํ
์คํธ ์
๋ ฅ์ ํผํ๋ ๊ฒ ์ธ์ ๋ค๋ฅธ ์ด์ ์์ด ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋์ props
๋ฐ state
์์ ๊ฑฐ์ ๋ชจ๋ ๊ฐ์ ๋ถํดํฉ๋๋ค.
๊ทธ๋์ ์ ๊ฐ ์ํฉ์ ๊ฐ์กฐํ๊ณ ์์ง๋ง, ์์ผ๋ก ์น์ฐ์ณ์ ์ํ์ ํผ๋จ๋ฆฌ๋ ๋ฐ ์ด์ ์ ๋ง์ถ๊ฑฐ๋ ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ ์ ์๋ ๋ค๋ฅธ ์ธก๋ฉด ์ฃผ์ ์ ์ด์ ์ ๋ง์ถ์ง ๋ง์ญ์์ค.
์ข ๋ ์ค์ฉ์ ์ด๋ผ๋ฉด ๊ฐ์ธ์ ์ธ ์ ํธ๋ ๋์ ๊ธฐ์ ์ ์๋ฏธ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ง๋ง className
์ ๊ธฐ์ ์ ์๋ฏธ์ ๋ํด ๋งํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค.
์ฃผ์ํด์ผ ํ ๋ ๋ค๋ฅธ ์ฌํญ์ ํต์ฌ ๊ธฐ์ฌ์๊ฐ ๊ฐ์ธ ์ทจํฅ์ ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ๋๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ค์ ์๊ฐ, ๋ ธ๋ ฅ ๋ฐ ๋(ํ์ฌ์์)์ ์ปค๋ฎค๋ํฐ๊ฐ ์ฐ๋ฆฌ์ ๊ด์ฌ์ ์ง์คํ ๋ ๋์ ๊ฒ๋ค์ด ์๋ค๋ ๊ฒ์ ์ดํดํ๊ณ Core ํ์ ๋๊ตฐ๊ฐ๊ฐ ์ฐ๋ฆฌ๊ฐ ์ ํธํ๋ ๊ฒ์ ํ ์๊ฐ์ ํ ์ ํ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ๋ฉด ๋ ์ข์ต๋๋ค. React์ ๋ค์์ผ๋ก ์ค์ํ ๊ฒ์ ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋ํ ๋ฆฌํฉํ ๋ง ์ฝ๋๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ค์, ๋์ ์ค์ฉ์ ์ธ ์๊ฒฌ.
ํด๋ฆฌํ์ ๋ํด ๋งํ์๋ฉด, ๋ฐ์์ด ์ฌ์ฉ์๊ฐ "์ข์" ํด๋ฆฌํ์ ์ง์ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ์งํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
(์: ์ฝ๋์์ hasBadMapPolyfill
)
React๋ ํ๋ก๊ทธ๋๋ฐ ํ๋ก์ ํธ์์ ์ ์ง๋ฅผ ์ ์๋ ๋ชจ๋ ๋ฌด์์ ์ค์์ ๋ํด ์ฑ
์์ ์ง์ง ์์์ผ ํฉ๋๋ค.
@AlexGalays React๋ ์ฌ๋ฐ๋ฅธ ์๋ฏธ ์ฒด๊ณ๋ก Map ๊ตฌํ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์กดํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋น์ค์ ํด๋ฆฌํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฑ์ด ์์์น ๋ชปํ ํผ๋์ค๋ฌ์ด ๋ฐฉ์์ผ๋ก ์ค๋จ๋ ์ ์์ผ๋ฏ๋ก ์ด ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ๊ฒฝ๊ณ ํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
์ด๊ฒ์ ๊ฐ๋ฐ ๋น๋์์๋ง ์ํ๋๋ฏ๋ก ํ๋ก๋์ ์์ ์ด์ ๋ํ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
์ ๋ ์ด React Fire๋ฅผ ์ข์ํ๊ณ ReactDOM์ ํ๋ํํ๋ ๋ ํฅ๋ฏธ๋ก์ด ๋จ๊ณ์ธ ๊ฒ ๊ฐ์์ ๊ณ์ ์์ ํ ๊ฒ์ ๋๋ค.
๋ฐ์ ๋ฐ์ฌ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฆฌ๋ฐ์ธ๋ํ์ง ์์ ์ ์์ต๋๊น?
class Compo exntends Compoent {
onClick() {
...
}
render() {
<button onClick={this.onClick} >click me </button>
}
}
์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฆฌ๋ฐ์ด๋๋๊ธฐ๋ฅผ ์ํ๋ ์ฌ๋์ ์๋ฌด๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ฌธ ๊ฒฝ์ฐ์ง๋ง ์๋์ผ๋ก ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
@cullophid
๋ฐ์ ๋ฐ์ฌ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฆฌ๋ฐ์ธ๋ํ์ง ์์ ์ ์์ต๋๊น?
ํ์ดํ ํจ์ ์๋ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๊ฑฐ๋ ์์ฑ์์์ ํจ์๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ๋ฉ์๋๋ฅผ ํด๋์ค์ ํ ๋ฒ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค. ์ด๋ฒคํธ์ ์ฐ๊ฒฐํ๋ ค๋ ๊ณ ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฉ๋ชจํํ๊ฑฐ๋ DOM ์์ฑ์ ๋
ธ๋ ์์ฒด์ ์ฐ๊ฒฐํ๊ณ event.currentTarget
๋ฅผ ํตํด ์ก์ธ์คํ ์ ์์ต๋๋ค.
class Compo extends Compoent {
onClick = () => {
...
}
render() {
<button onClick={this.onClick}>click me</button>
}
}
์ด๋ฒคํธ ์์คํ ์ ๋จ์ํํ๋ ๋ ๋ค๋ฅธ ์ด์ (๋ชจ๋ ํ๋ ์์ํฌ์ฒ๋ผ ํ๋ง ์์ด ์์ DOM ์ด๋ฒคํธ๋ก ๋์๊ฐ ์ ์์ต๋๊น? :))์ ์ ์ ์ผ๋ก ์ ๋ ฅํ๋ ๊ฒ์ด ๋ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค.
์ข์ ๊ณํ์ธ ๊ฒ ๊ฐ์ต๋๋ค! IE 11 ์ง์์ด ์์ผ๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค(์์ ํ ๊ด์ฐฎ์ ์์ฒด ํด๋ฆฌํ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋ฏธํ๋๋ผ๋). ์ ๋ถ ๊ณ ๊ฐ๊ณผ ํจ๊ป ์ผํ๋ ์ฌ๋์ผ๋ก์ IE 11 ์ฌ์ฉ์ ์ค๋จํ ์๊ธฐ๋ ์์ ํ ์ ์ ์์ต๋๋ค.
@MatthewHerbst ๊ฐ์ ๋ณดํธ, ์ฐ๋ฆฌ ๊ณ ๊ฐ์ IE 11์ ์ฌ์ฉํ๊ณ ํธ๋ํฝ์ด ์ถฉ๋ถํฉ๋๋ค ๐ข
์ด ๋ชจ๋ ๊ฒ์ด ๋งค์ฐ ํฅ๋ฏธ๋กญ๋ค๋ ๋ง์ ํ๊ณ ์ถ์์ต๋๋ค. ๋ด๊ฐ ์ฝ์ ํ ๊ฐ์ง ๊ฑฑ์ ์ค๋ฌ์ด ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ธฐ์กด ๋ธ๋ผ์ฐ์ ์ ์ฐจ์ด์ ์ค ์ผ๋ถ๋ฅผ ๋ถ๋๋ฝ๊ฒ ํ๋ ค๊ณ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
์ง๊ธ์ React์ ์ด๋ฒคํธ ์์คํ ์ด React๊ฐ ์ง์ํ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ "๊ทธ๋ฅ ์๋"ํ๋ค๋ ์ฌ์ค์ ์๊ณ ์ถ์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ ์ฑ์ ์ฑ ์์ด ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ถ์ ํ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๊ฐ ๋ง์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ...์ ์ด๋ ๋ด ์ฑ์์๋ ๊ทธ๋ด ๊ฒ์ ๋๋ค. :)
์ด์จ๋ ์ข์ ๋์๊ด์ ํญ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@kentcdodds ๋ ๋ด๊ฐ ์ ๋ต ์ ์ฝ๊ณ ์๋ ๊ฐ๋ฅํ ์์ด๋์ด๋ก JSX 2.0 ํตํฉ์ ์ธ๊ธํ์ง๋ง ์ด์ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๊ทธ๊ฒ์ด ๋จ์ง ๊ณต์ค์ ๋ ์๋ ๊ฒ์ธ์ง ์๋๋ฉด ๋ฏธ๋๋ฅผ ์ํด ๋ณด๋ฅ๋ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
IE๊ฐ ์ฃฝ๊ฒํ์ญ์์ค! ์์ ํ ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ์ง ๋ง์ญ์์ค. ์ ํ์ ์ธ ํ์ฌ๋ผ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ก ์ ํํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทํ์ ์น์ด ์ง์์ ์ค๋จํ ๋๊น์ง ํต๊ณ์ IE11์ด ํ์๋ฉ๋๋ค.
@hbroer ๋ ๊ฑฐ์ ์ํํธ์จ์ด?
@hbroer ์๋ฌด๋ ์์ ์ ์ฌ์ดํธ๊ฐ ์ฌ์ ํ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋จธ๋ฌผ์ง ์๊ณ ์ ํ์ ์ฌ์ง๊ฐ ์๊ฑฐ๋ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ฉ์๋ฅผ ์ํ ์ฌ์ดํธ๋ฅผ ๊นจ๋ ๊ฒ์ ๊ทน๋๋ก ์ ๋์ ์ด๋ฉฐ ์ ๋ฐ์ดํธ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋๋ผ ์๋ฌด๊ฒ๋ ๋จ๊ธฐ์ง ์์ต๋๋ค.
๋๋ ๊ณผ๊ฑฐ๋ฅผ ์ํด ์ฝ๋ฉํ๋ ๊ฒ์ ์ซ์ดํ๊ณ ์๋ก์ด ๊ธฐ์ ์ ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ๋์ 90%๊ฐ ์ฌ์ ํ ์ง๋ ์ธ๊ธฐ์ ์ด๊ณ ์๋ ํ์ 15% ์๋น์์ ํํธ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ^^ ์์ผ๋ก 10๋ ๋์ "์ ์ด ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 6 ๋ฉ์ฒญ์ด๊ฐ ๋ญ์ผ, ์ฐ๋ฆฌ๋ ๊ทธ 15%๋ฅผ ์ง์ํด์ผ ํ๋ค"๋ผ๋ ๋ง์ ๋ค์ ๋ฃ๊ณ ์ถ์ง ์์ต๋๋ค.
btw M$ ์๊ธฐ๋ Windows 7 ๋ฐ 8์ฉ Edge๋ฅผ ์นํท์ผ๋ก ์ ํํ์ฌ ๊ฐ์ ธ์ต๋๋ค.
@hbroer ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์ฐ๋ฆฌ์ ๋ฌธ์ ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋์ ๋ํ ์ฝ๊ฐ์ ๊ณต๊ฐ์ ๊ฐ์ง์ธ์.
(๋ฐ๋ก, M$
๋ ์์ฃผ ์ด๋ฆฌ๊ณ ๋งค์ฐ ์ค๋๋ 90๋
๋ ํ๋ฐ ์ฐธ์กฐ์ด๋ฏ๋ก ์ ๊ฑฐํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์ ๊ฑฐํ ๊ฒฝ์ฐ ์ ์ณ๋๊ณ ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค.)
์ฌ๊ธฐ ๋ง์ M$ ํฌ ๋ณด์ด์ฆ๊ฐ ์์ต๋๋ค. :DI๋ ์ ๋ง๋ก ์ธ๊ฐ์ ๊ด์ฌ์ด ์์ง๋ง ๊ธฐ์ ๋ฐ์ ์ ๋ฐฉํดํ๋ ์กฐ์ง์ด๋ ์ค๋ ์ธ์์ ๊ฑธ์ณ ๊ทธ ์ค๋๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ง์ํด์ผ ํ๋ ์ฝ๋์๋ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ "์ค๋๋ ์ฐ๋ ๊ธฐ์ ํธํ ๊ฐ๋ฅ"ํ๊ฒ ๋ง๋๋ ์ถ๊ฐ ํจํค์ง์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ 2019๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ <=2013 ๊ธฐ์ ์ด ์๋๋ผ >=2019 ๊ธฐ์ ์ ์ผ๋์ ๋๊ณ ์ฝ๋ฉํด์ผ ํฉ๋๋ค. ์ฌํ๋ฆฌ์ (์ค๋๋) ์์ง ์ฐ๋ ๊ธฐ๋ฅผ ์ง์ํด์ผ ํ๋ ๊ฒ์ ์ถฉ๋ถํ ๋์ ์ผ์ ๋๋ค.
๋ง์ดํฌ
@hbroer ์ฌ์ค ๊ณ ๋ ์๋๋ก์ด๋ ๋ธ๋ผ์ฐ์ ์ ๊ณ ๋ ์ฌํ๋ฆฌ๋ ์ด๋ค ๋ง์ดํฌ๋ก์ํํธ ๋ธ๋ผ์ฐ์ ๋ณด๋ค ๋ ํฐ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๊ฒ์ "fanboi"๊ฐ ๋๋ ๊ฒ์ด ์๋๋ผ ์ ๋ฌธ์ ์ด ๋๋ ๊ฒ์ ๊ดํ ๊ฒ์ด๋ฉฐ "M$"๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์. ์ค๋๋ ๊ธฐ์ ์ ์ง์ํ๋ ๊ฒ์ ์ด๋ค ์์ผ๋ก๋ "๋์" ๊ฒ์ด ์๋๋ผ ๋๋์ ์ด๊ณ ์ค๋ฆฌ์ ์ธ ์ผ์ ๋๋ค. ๋์ ์ ์ Netscape Navigator, IE 6, ์ต์ Chrome ๋ฑ "X์์ ๊ฐ์ฅ ์ ์๋ํ๋" ์น์ฌ์ดํธ์ ๋๋ค.
์ฌ๊ธฐ ๋ง์ M$ ํฌ ๋ณด์ด์ฆ๊ฐ ์์ต๋๋ค.
@hbroer ์ฌ๊ธฐ์์ ์ ๋ฉด ๊ด๊ณ ์ธ์ ๊ณต๊ฒฉ์ ํ๋ ์ฌ๋์ ๋ด ๋๋ค.
๊ทธ๋ฌ๋ 2019๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ <=2013 ๊ธฐ์ ์ด ์๋๋ผ >=2019 ๊ธฐ์ ์ ์ผ๋์ ๋๊ณ ์ฝ๋ฉํด์ผ ํฉ๋๋ค.
์๋, ๊ทธ๋ฌ๋ฉด ์ ๋๋ค.
1์ด ์ ๋ ์๊ฐ์ ๋ด์ด ๋ธ๋ผ์ฐ์ ๋ชฉ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ดํด๋ณธ๋ค๋ฉด ๋๋ ๊ฒ์ ๋๋ค. ๋์ ์, ๋น์ ์ ์ธ์ ๊ณต๊ฒฉ๊ณผ ํ๊ต ์๋น ์์ค์ ๋ชจ์์ ์์กดํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์ถฉ๋ถํ๋ฉด IE11์ ์น์ฌ์ดํธ์ ์ก์ธ์คํ๋ ์๋นํ ๊ท๋ชจ์ ์ฌ๋๋ค์ด ๋ฉ๋๋ค. ์ด์ ์ง์ฅ์์ ์ฐ๋ฆฌ๋ IE11์์ ํ ๋ฌ์ ๋ฐฑ๋ง ๋ช ์ ๊ฐ๊น์ด ์ฌ๋๋ค์ด ์ฐ๋ฆฌ ์น์ฌ์ดํธ์ ์ก์ธ์คํ์ต๋๋ค.
์ค๋๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ง์ํ๋ ค๋ฉด ํด๋ฆฌ ์ฑ์ฐ๊ธฐ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ๋ฏธ๋์ ํ์ฌ๋ฅผ ์ํด ์ฝ๋ฉํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. ์ค๋๋ ๊ธฐ์ ์ ์ง์ํ๋ฉด ์น ์ฑ์ด ํ์ ์ด์์ผ๋ก ๋ฑ๋ฑํด์ง๊ณ ๋๋ ค์ง๋๋ค.
ps. ๋น๊ผฌ๋๊ฑฐ ๋ชป์ฝ๊ณ ์๋๊ฑฐ ์ ๊ฒฝ์์ฐ๋ ์ฌ๋์ด ๋ณด์ด๋ค์^^
@hbroer ๋น์ ์ IE11์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฝ๋ฉํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ค์ ํ ๋ฒ. https://browserl.ist ์์ ๊ธฐ๋ณธ๊ฐ ์ ์ฐธ์กฐํ์ญ์์ค.
ps. ๋น๊ผฌ๋๊ฑฐ ๋ชป์ฝ๊ณ ์๋๊ฑฐ ์ ๊ฒฝ์์ฐ๋ ์ฌ๋์ด ๋ณด์ด๋ค์^^
์, ์๋๋๋ค. ์ด๊ฒ์ ํธ๋กค๊ณผ ๋์ดํฐ์์ ๊ดด๋กญํ๋ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ์ ์ ์ ๋๋ค. "๋ญ๋ผ๊ณ ?! ์ํ๊ฒ ์๋์ผ! ๋๋ด์ด์์ด!"
"์ธํฐ๋ท์ ์ฌ์ฉํ๋ ์ฌ๋๋ค"๋ก ํํฐ๋งํ๋๋ผ๋ ์ง๊ตฌ์์ ์ฌ๋๋ค์ 0.20%๋ 640๋ง ๋ช ์ ๋๋ค. ๋ฐฑ๋ถ์จ์ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค. ์ธ๊ฐ์ ์ํ ์ฝ๋; ๊ณผ๊ฑฐ์ ๋ฏธ๋, ๋ฒ๋ค ํฌ๊ธฐ๋ ์ค์ํ์ง ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ํธํ์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ๋ง๊ฒ ์ฝ๋ฉํ๋ ค๋ ๊ฒฝ์ฐ ํ์คํ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ผ์ด ์ ๋๋ก ์๋ํ ๊ฒ์ผ๋ก ์์ํ ๋ฟ๋ง ์๋๋ผ ๋ก๋ ์๋๋ ๋นจ๋ผ์ผ ํฉ๋๋ค.
์ด์ 2019๋ ์ ์ ํ๋ก์ ํธ์ CSS ๊ทธ๋ฆฌ๋(IE11์์๋ง ์คํ์ ์ง์์ด ์์)๋ฅผ ์ฌ์ฉํ๊ณ ES6์ผ๋ก ๋ณํํ๊ณ ์ค๋๋ ๋ธ๋ผ์ฐ์ ์ ๋ํ ํด๋ฆฌํ์ ์ ๊ณตํ๊ณ ์ถ์ง ์์ต๋๋ค. IE11 ์ฌ์ฉ์๋ ๋จ์ํ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ์ฌ๋๋ค์ด ์์ต๋๋ค. ๋น์ ์ ๊ทธ๋ค์ ๊ฑฑ์ ํฉ๋๊น? ๋น์ ์ ํต๊ณ์์ ๊ทธ ์ฌ๋๋ค์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ญ์ ๊ทธ ๋๊ตฌ๋ฅผ ์ฐจ๋จํ๋ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์ฒ๋ผ ํต๊ณ ๋ถ์ผ์ ์์ง ์์ต๋๋ค.
๋๋ ๊ตฌ์์ด ์๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฃผ์ํฉ๋๋ค. ๋๋ Windows 7(2020๋ 1์ ๋ง ์ง์) ๋๋ฌธ์ IE11 ์ฐ๋ ๊ธฐ๋ณด๋ค ์ฌ์ฉ์๊ฐ ์ ์ edge๋ฅผ ์ง์ํ๊ณ ํ๋์ธ์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ^^
ํด๋ฆฌํ์ด๋ ํธํ์ฑ ํจํค์ง ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ง๋ ์ฌ๋์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํต์ฌ์ ์ต์ ์ํ์ฌ์ผ ํ๋ฉฐ ์ค๋๋ M$ ๊ธฐ์ ๋ธ๋ผ์ฐ์ ์ ํ ๋ถ๋ถ ๋๋ฌธ์ ๋ค์ณ์ ธ ์์ด์๋ ์ ๋ฉ๋๋ค.
๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์์ ๋ด๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ LTS์ ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ์ ์๋ ๊ฒ์ ๋๋ค. ํ์ฌ์ ๊ธฐ๋ฅ์ผ๋ก ์ต์ ํ์ด์ง๋ฅผ ๊ตฌ์ถํ๋ค๋ฉด ์ต์ ๊ธฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ต๋์ ์์ ์ฑ๊ณผ ํธํ์ฑ์ด ํ์ํ b2b์ฉ ์น์ฑ์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ LTS ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ๋ น์์์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ง ์ ๋ฐ์ดํธ๋์ง ์์ Windows XP์ IE6์ ํจ๊ป ์ฌ์ฉํ๋ ์์์ 100t๋ฅผ ์ง์ํ ์ ์์ต๋๋ค^^
ํธํ์ฑ์ ์๋ณธ ๊ฒ์๋ฌผ์ "์ ์ถฉ์" ์๋์ ๋ช ํํ๊ฒ ๋์ด๋์ด ์์ผ๋ฏ๋ก ์ด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋ ๊ฒ์ ์ด๋ฏธ ๋ ๋ฒ์งธ ์ด์ ์ ๋๋ค.
์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ ๋ง์ ํด๋ฆฌํ๊ณผ ํตํฉ์ด ํ์ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํ ์ ํ ์ด ๋ ๊ฒ์ ๋๋ค. ๋ํ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋์์ ๋ํด ์ฌ๋ฌ ๋ฒ๋ค์ ๋ง๋ค๊ณ ๊ฐ ๋ฐฉ๋ฌธ์์ ๋ํด ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ JS๋ฅผ ์ ๊ณตํ์ฌ ์ ์ฒด ์ฒญ์ค์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
React Fire ์์ฒด์ ์งํ ์ํฉ์ ์ํฅ์ ๋ฐ์ง ์์ ๊ฒ ๊ฐ์ผ๋ฏ๋ก ์ด ํ ๋ก ์์ ์ป์ ์ ์๋ ๊ฒ์ ์์ต๋๋ค. ๊ณ์ ์งํํ๊ณ ๋ณธ๋ก ์ผ๋ก ๋์๊ฐ์.
#6410์ ํด๊ฒฐํ ์ข์ ๊ธฐํ๊ฐ ์๋๊น์? onChange
/ onInput
์ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ํฅ์ด ๋น์ทํด ๋ณด์
๋๋ค.
์ค๋๋ง์ด์ผ. ์ฌ๊ธฐ ์ฐ๋ฆฌ์ ์์น์ ๋ํ ์์ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ 12์์ Fire ์์ ์ ์์ํ์ต๋๋ค. https://github.com/facebook/react/pull/14382 ๋ฐ ๊ธฐํ ์ค๋ ๋์์ ์ผ๋ถ ์์ ์ด ์งํ ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ถํ์ํ๊ฑฐ๋ ๊ตฌ์์ด๋ผ๊ณ ์๊ฐ๋๋ ์ด๋ฒคํธ ์์คํ ์ ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์์ํ๋ฉด์ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ๋งค์ฐ ์ ์ฉํ๊ณ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋ ๋ง์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๋ ๊ฑฐ์ ํฝ์ฐฝ์ ์ค์ด๊ณ ์ถ์ง๋ง ์์ DOM ์ด๋ฒคํธ์ ๋ ๊ฐ๊น์ด ๊ฐ๋ ๊ฒ์ด ์ค์ ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉํฅ์ธ์ง๋ ๋ถ๋ช ํ์ง ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ค์ ์ถ๊ฐํ๊ธฐ ์ํด ์ค์ด๋ ๊ฒ์ ์ต์ ์ ์ ์ถฉ์์ด ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ ์์ค์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ํญ์ ๊ฐ๋ฅํ ๊ฒ๋ ์๋๋๋ค.
์ด์๋ ๋ณ๋๋ก FB5 ์์
์ ํ๋ ๋์ React๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐ์ค์ ํฐ์น ์ฅ์น ๋ชจ๋์์ ์๋ํ๊ณ ๋๋์ด ์ข์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐ ์๋นํ ์ด๋ ค์์ด ์์์ ๊นจ๋ฌ์์ต๋๋ค. onClick
์ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค๋ ๋ง์ฐ์ค์ ํฐ์น๋ก ๋งค์ฐ ๋ค๋ฅด๊ฒ ๋๊ปด์ง๋ฉฐ, ํธ๋ฒ, ํฌ์ปค์ค ๋ฑ์ผ๋ก ์ผ๊ด๋ ๋์์ ๋ฌ์ฑํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค.
๊ทธ๋์ Fire ์์ ์ ์์ํ ๋ ์ปค์คํ ์ด๋ฒคํธ ์์คํ ์ด ํ์ํ์ง ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ ๊ฑฐํ ํ๋กํ ํ์ ํ, ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์ด๋ฒคํธ ์์คํ ์ด ์ค์ ๋ก ์ด๋ฌํ ์ผ๋ จ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฅ ํฐ ์๋จ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
์ด ์กฐ์ฌ์ ๊ฒฐ๊ณผ, React Fire์ ์ผ๋ถ์ธ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ํ ์์ ์ ์ผ์์ ์ผ๋ก ์ค๋จํ๊ณ ๋จผ์ ์ด๋ฒคํธ ์์คํ ์๋ง ์ง์คํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ ํ๋ก์ ํธ๋ React Flare(https://github.com/facebook/react/issues/15257)๋ก ์๋ ค์ง๊ฒ ๋์์ต๋๋ค. ๊ทธ ์์ฒด๋ก ์ถฉ๋ถํ ๋์ ์ ์ด๋ฉฐ ์ด ๋ชฉ๋ก์ ๋ค๋ฅธ ํญ๋ชฉ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๋จผ์ ๋จ๋ ์ผ๋ก ์ง์คํ๊ณ ์์ต๋๋ค.
React Flare์ ๋ชฉํ๋ ๋ฐ์คํฌํฑ๊ณผ ๋ชจ๋ฐ์ผ์์ ๋ง์ฐ์ค์ ํฐ์น๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์คํ ์ ์๋ ๋ฉ์ง UI๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ Press, Hover ๋ฐ Focus์ ๊ฐ์ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ์ธ์ API๊ฐ ํฌํจ๋ฉ๋๋ค. ํ์ฌ React ์ด๋ฒคํธ ์์คํ ๊ณผ ๋ฌ๋ฆฌ Flare ๋์์ธ์ ์ฌ์ฉํ์ง ์๋ ์ด๋ฒคํธ์ ๋ํด ๋ฒ๋ค์ ํฝ์ฐฝ์ํค์ง ์์ผ๋ฉฐ ๋ง์ฐ์ค ๋ฐ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋ ์์ ์ค์ผ ์ ์์ด์ผ ํฉ๋๋ค.
React Flare๋ ์์ง ์คํ ๋จ๊ณ์ด์ง๋ง ์ ๋ฐ์ ์ธ ๋ฐฉํฅ์ ๋ํด ์๋นํ ํ์ ํ๊ณ ์์ผ๋ฉฐ ๊ฒฐ๊ตญ ๊ณต์์ ์ผ๋ก ์คํ ์์ค์์ ์ฌ์ฉํ ์ ์๋๋ก ํ ๊ณํ์
๋๋ค. (์ง๊ธ์ ๋ง์คํฐ์์ ์๋์ผ๋ก ๋น๋ํ๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ฉฐ, ํ์ฌ ์์
์ค์ด๋ฏ๋ก semver ๋ณด์ฅ์ด ์์ต๋๋ค.) Fire์ ๋ง์ฐฌ๊ฐ์ง๋ก "Flare"๋ ์ฝ๋๋ช
์ผ ๋ฟ์
๋๋ค. ์ ์ ํ ๋ช
๋ช
, ๋ฌธ์ ๋ฑ. ์๋ง๋ react/events
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ React Native์์๋ ๋๋ฑํ ์ด๋ฒคํธ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค.
React Flare์ ์ด๊ธฐ ๊ตฌํ์ ๋ง์น ํ์๋ React Fire ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ์ ๋ฐฐ์ด ๋ด์ฉ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ชจ๋ ์ฌํญ์ ์ฌํ๊ฐํ ๊ฒ์ ๋๋ค. Flare๊ฐ "ํ๋ถํ" ์ด๋ฒคํธ ์งํฉ์ ์ธ์ํ๋ฉด React DOM์์ "๊ธฐ๋ณธ" ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๋ง์ ํด๋ฆฌํ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง ํ ๋ก ์ ์ฐธ์ฌํด ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ์ด ์ ๋ณด๊ฐ ์ ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ๋ฅญํ ์ผ! ๋ฐ๋ผ์ ์ด๋ฒคํธ ์์คํ ์ ๋ง์ฐ์ค์ ํฐ์น ์ด๋ฒคํธ์ ๊ท ํ์ ์ ์งํ๋ ๋ฐ ์ฌ์ ํ ํ์ํ์ง๋ง ๊ฐ๋ณ๊ณ React์ ๋ ๋ฆฝ์ ์ ๋๋ค.
"React Flare"๊ฐ ๊ธฐ๋ณธ React ํจํค์ง์ ์ผ๋ถ๋ก ์ ๊ณต๋๊ฑฐ๋ ํจ๊ป ์ ๊ณต๋ API์ ์์ ๊ณ ๋ คํ์ฌ ์ถ๊ฐ ์ค์น๊ฐ ํ์ํฉ๋๊น?
์ฌ์ฉํ์ง ์๋ ์ฝ๋๊ฐ ๋ฒ๋ค๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ถ์ต๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ์๋๋ API๋ณ๋ก ์ตํธ์ธํ๋ ๊ฒ์ ๋๋ค. ๋จ์ผ ํจํค์ง์ ๋ณ๋์ ์ง์ ์ ์ด ์์ ์ ์์ต๋๋ค.
์ด ๋ง์ฐ์ค ๋ฐ ํฐ์น ์ด๋ฒคํธ ์์คํ ์ด PointerEvent ๋ฅผ ํ์ฉํฉ๋๊น? ์ด์ ์ ๋ฐ์ดํธ์์ ์ด ์น ํ์ค์ ๋ํ ์ธ๊ธ์ ๋ณธ ์ ์ด ์์ผ๋ฏ๋ก ์ฃผ์๋ฅผ ํ๊ธฐ์ํค๊ณ ์ถ์์ต๋๋ค.
ํฌ์ธํฐ ์ด๋ฒคํธ๋ ํฌ์ธํ ์ฅ์น์ ๋ํด ์คํ๋๋ DOM ์ด๋ฒคํธ์ ๋๋ค. ๋ง์ฐ์ค, ํ/์คํ์ผ๋ฌ์ค ๋๋ ํฐ์น(ํ๋ ์ด์์ ์๊ฐ๋ฝ)์ ๊ฐ์ ํฌ์ธํ ์ ๋ ฅ ์ฅ์น๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋จ์ผ DOM ์ด๋ฒคํธ ๋ชจ๋ธ์ ์์ฑํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํฌ์ธํฐ๋ ํน์ ํ๋ฉด ์ขํ ์งํฉ์ ๋์์ผ๋ก ํ ์ ์๋ ํ๋์จ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ฅ์น์ ๋๋ค. ํฌ์ธํฐ์ ๋ํ ๋จ์ผ ์ด๋ฒคํธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์น ์ฌ์ดํธ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์์ฑ์ ๋จ์ํํ๊ณ ์ฌ์ฉ์์ ํ๋์จ์ด์ ๊ด๊ณ์์ด ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ์ ๋ํ ์ง์ ๋งํฌ๊ฐ ์์ต๋๋ค.
@jonathantneal ์, ์ ์์คํ ์ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์ง์ํ์ง ์์ ๋ ๋ง์ฐ์ค/ํฐ์น ์ด๋ฒคํธ๋ก ๋์ฒดํฉ๋๋ค.
https://github.com/facebook/react/issues/11347 ์ด ์ด ๋ฌธ์ ์์ ํด๊ฒฐ๋์ง ์์ ๊ฒ์ด ๊ฑฑ์ ๋ฉ๋๋ค. React๋ https://custom-elements-everywhere.com์ ํญ๋กํฉ๋๋ค.
์ด๋ฒคํธ ์์คํ ์ ์ฌ์ค๊ณํ ๋ ์๋์ฐ ๋ฃจํธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. React ๋ฃจํธ์ ์ฐ๊ฒฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ค๋๋ ๋๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๊ณ ์์์๋ง ์ฐ๊ฒฐ๋ฉ๋๋ค(https://github.com/facebook/react/issues/9242, https:// github.com/facebook/react/issues/15759, https://github.com/facebook/react/issues/13713, https://github.com/facebook/react/issues/11827)
์ด ์ ๋ฐ์ดํธ์์: https://github.com/facebook/react/issues/13525#issuecomment -499196939 @gaearon ์ธ๊ธ:
๊ทธ๋ฌ๋ ๋ถํ์ํ๊ฑฐ๋ ๊ตฌ์์ด๋ผ๊ณ ์๊ฐ๋๋ ์ด๋ฒคํธ ์์คํ ์ ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์์ํ๋ฉด์ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ๋งค์ฐ ์ ์ฉํ๊ณ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋ ๋ง์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด๋ฌํ ์ฃ์ง ์ผ์ด์ค์ ๋ชฉ๋ก์ด ์ด๋์๋ ๋ฌธ์ํ๋์ด ์๋์ง ๊ถ๊ธํ์ต๋๋ค.
@gaearon ์ด์ Flare๊ฐ ๋๊ฐ๊ณ (SCNR), ์ ๋ฐ์ดํธ๋ ๊ณํ( 2019๋ 6์ 5์ผ ์ ๋ฐ์ดํธ ๊ด๋ จ)์ด ์ด๋ป๊ฒ ์งํ๋๋์?
๊ทธ๋ฆฌ๊ณ @trusktr ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๊ธฐ์์๋ #11347์ ์ฒ๋ฆฌํ๊ณ ์ถ์ต๋๋ค.
ํด๋ฆฌํ์ ๋ค๋ฅธ ๋ฒ๋ค, ํนํ ์ฃผ์ ์๋ฒ๊ทธ๋ฆฐ ๋ธ๋ผ์ฐ์ ์ ๊ด๋ จ์ด ์๋ ๋ฒ๋ค๋ก ๋ถํ ํ ์ ์์ต๋๋ค.
์๋ ํ์ธ์, ์ค๋ ์๊ฐ์ด ํ๋ ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ฒ๋ค์ ์ผ๊ณ ๋๊ธฐ ์ํด ์๋ํ์ต๋๋ค.
๊ฐ๊ฐ์ ๋ํด ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
value
์์ฑ์ ์ ๋ ฅ ๊ฐ ๋ฐ์์ ์ค์งํฉ๋๋ค(https://github.com/facebook/react/issues/11896). ์ด๊ฒ์ ์๋ https://github.com/facebook/react/pull/6406์ ํตํด React 15.2.0์ ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ๋๋ค์ DOM ๊ฐ๋ ์ ๋ชจ๋ธ์ด DOM ๊ฒ์ฌ๊ธฐ์์ ๋ณด๋value
๊ฐvalue
JSX ์์ฑ๊ณผ ์ผ์นํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ DOM์ด ์๋ํ๋ ๋ฐฉ์์ ๊ทธ๋ ์ง ์์ต๋๋ค. ํ๋์ ์ ๋ ฅํ ๋ ๋ธ๋ผ์ฐ์ ๋value
์์ฑ์ ์ ๋ฐ์ดํธํ์ง ์์ต๋๋ค. React๋ ํ๋ฉด ์ ๋ฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ CSS ์ ํ๊ธฐ์ ์์กดํ๋ ์ผ๋ถ ์ฝ๋์ ๋์์ด ๋ ์ ์์ง๋ง ์ผ๋ จ์ ๋ฒ๊ทธ๋ฅผ ์ผ์ผ์ผฐ์ต๋๋ค. ๊ทธ ์ค ์ผ๋ถ๋ ์ฌ์ ํ ์์ ๋์ง ์์์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ผ๋ถ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/facebook/react/issues/7179 , https://github.com/facebook/react/issues/8395 , https://github.com/facebook /react/issues/7328 , https://github.com/facebook/react/issues/7233 , https://github.com/facebook/react/issues/11881 , https://github.com/facebook/react /issues/7253 , https://github.com/facebook/react/pull/9584 , https://github.com/facebook/react/pull/9806 , https://github.com/facebook/react/pull /9714 โโ, https://github.com/facebook/react/pull/11534 , https://github.com/facebook/react/pull/11746 , https://github.com/facebook/react/pull/12925 . ์ด ์์ ์์ ๋ธ๋ผ์ฐ์ ์ ๊ณ์ ์ธ์ฐ๋ ๊ฒ์ ๋ถ๋ช ํ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ ๋๋๋ ค์ผ ํฉ๋๋ค. ์ด ์ฌ์ ์ ๊ธ์ ์ ์ธ ๋ถ๋ถ์ DOM ๊ธฐ์ฌ์( @nhunzaker , @aweary , @jquense ๋ฐ @philipp-spiess)์ ์ง์น ์ค ๋ชจ๋ฅด๋ ์์ ๋๋ถ์ ์ด์ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ ์์ธํ DOM ํ ์คํธ ๊ณ ์ ์ฅ์น๋ฅผ ๊ฐ๊ฒ ๋์๋ค๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ด๊ฒ์ ํ๊ธฐ๋ฅผ ์ํ์ง๋ง ์ด ๋ชฉ๋ก์ ๋ค์ ํญ๋ชฉ์ ์ง์คํ ์ ์๋๋ก ์ต์ํ์ ๊ฐ๋ฅํ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ๋๋ก React 17์ "์์ฝ" ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ณ๊ฒฝ ์ฌํญ์ React 18๊น์ง ๋๊ธฐํฉ๋๋ค.
- ๋ฌธ์๊ฐ ์๋ React ๋ฃจํธ์ ์ด๋ฒคํธ๋ฅผ ์ฒจ๋ถํฉ๋๋ค(https://github.com/facebook/react/issues/2043). ๋ฌธ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ React ์ฑ์ ๋ ํฐ ์์คํ ์ ํฌํจํ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. Atom ํธ์ง๊ธฐ๋ ์ด์ ์ถฉ๋ํ ์ฒซ ๋ฒ์งธ ์ฌ๋ก ์ค ํ๋์์ต๋๋ค. ๋ชจ๋ ๋ํ ์น์ฌ์ดํธ๋ ๊ฒฐ๊ตญ
stopPropagation
๊ฐ ๋น React ์ฝ๋์ ์ํธ ์์ฉํ๊ฑฐ๋ React ๋ฃจํธ(https://github.com/facebook/react/issues/8693, https://github)์์ ์ํธ ์์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋งค์ฐ ๋ณต์กํ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. .com/facebook/react/pull/8117, https://github.com/facebook/react/issues/12518). ๋ํ ์ ๋ฐ์ดํธ ์ค์ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ๋ ์ํํ ์ ์๋๋ก ๋ชจ๋ ๋ฃจํธ์ ์ด์ฌํ ์ด๋ฒคํธ๋ฅผ ์ฒจ๋ถํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ React 17์์ ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์์ฒญ๋ ์์ ๋ฉ์ด๋ฆฌ๋ก ํ๋ช ๋์์ง๋ง ๊ณ ๋ง๊ฒ๋ ์๋ฃ๋์์ต๋๋ค.
onChange
์์onInput
๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ์ ์ด๋์ง ์๋ ๊ตฌ์ฑ ์์์ ๋ํด ํด๋ฆฌํํ์ง ๋ง์ญ์์ค(https://github.com/facebook/react/issues/9657). ์์ธํ ๊ณํ์ ๋งํฌ๋ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์. React๊ฐ DOM์์input
์ด๋ฒคํธ๋ผ๊ณ ํ๋ ์ด๋ฒคํธ์ ๋ํด ๋ค๋ฅธ ์ด๋ฒคํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ํผ๋์ค๋ฌ์ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํฐ ์ด์ ์์ด ์ด์ ๊ฐ์ ํฐ ๋ณ๊ฒฝ์ ํผํ์ง๋ง, ์ด ๊ฒฝ์ฐ ์ ์ด ์ ๋ ฅ์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฃ์ง ์ผ์ด์ค์๋ง ํ์ํ ์ผ๋ถ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ๋์ ์ ๋ณ๊ฒฝํ๊ณ ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ ๊ฐ์ง ๋ณ๊ฒฝ์ ํจ๊ป ์ํํ๊ณ ์ด๋ฅผ ๊ธฐํ๋ก ์ฌ์ฉํ์ฌonInput
๋ฐonChange
๊ฐ ์ ์ด๋์ง ์๋ ๊ตฌ์ฑ ์์์ ๋ํด DOM ์ด๋ฒคํธ๊ฐ ์ํํ๋ ๊ฒ๊ณผ ์ ํํ ๋์ผํ๊ฒ ์๋ํ๋๋ก ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์๋ง๋ ์ด๊ฒ์ผ๋ก ๋์์ฌ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ผ๋ง๋ ๋ง์ ์ดํ์ด ๊ฐ์น๊ฐ ์๋์ง๋ ๋ถ๋ถ๋ช ํฉ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ์์ง ๋ฏธ์ ์ ๋๋ค.
- ์ด๋ฒคํธ ์์คํ ์ ๋ํญ ๊ฐ์ํํฉ๋๋ค(https://github.com/facebook/react/issues/4751). ํ์ฌ ์ด๋ฒคํธ ์์คํ ์ 2013๋ ์ฒ์ ๊ตฌํ๋ ์ดํ ๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค. React DOM ๋ฐ React Native์์ ์ฌ์ฌ์ฉ๋๋ฏ๋ก ๋ถํ์ํ๊ฒ ์ถ์์ ์ ๋๋ค. ์ ๊ณตํ๋ ๋ง์ ํด๋ฆฌํ์ ์ต์ ๋ธ๋ผ์ฐ์ ์ ํ์ํ์ง ์์ผ๋ฉฐ ์ผ๋ถ๋ ํด๊ฒฐํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ์์ฑํฉ๋๋ค. ๋ํ React DOM ๋ฒ๋ค ํฌ๊ธฐ์ ์๋น ๋ถ๋ถ์ ์ฐจ์งํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ฃผ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ด ์๋ ๊ฒ์ ์๋์ง๋ง ์ด๋ฒคํธ ์์คํ ์ ์์ ํ ๋ถ๊ธฐํ ๋ค์ DOM์ด ์ ๊ณตํ๋ ๊ฒ์ ๋ ๊ฐ๊น์ด ๋ค๊ฐ๊ฐ๋ฉด ์ผ๋ง๋ ์ต์ํ์ผ๋ก ๋ง๋ค ์ ์๋์ง ํ์ธํ ๊ฒ์ ๋๋ค. ํฉ์ฑ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ๊ฑฐํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. DOM์์ ๋ฒ๋ธ๋ง๋์ง ์๊ณ ๋ฒ๋ธ๋งํ ํ๋นํ ์ด์ ๊ฐ ์๋ ๋ฏธ๋์ด ์ด๋ฒคํธ์ ๊ฐ์ ๋ฒ๋ธ๋ง ์ด๋ฒคํธ๋ฅผ ์ค์งํด์ผ ํฉ๋๋ค. ํฌํธ์ ํตํ ๋ฒ๋ธ๋ง๊ณผ ๊ฐ์ ์ผ๋ถ React ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ์งํ๊ธฐ๋ฅผ ์ํ์ง๋ง ๋ ๊ฐ๋จํ ์๋จ(์: ์ด๋ฒคํธ ์ฌ์ ์ก)์ ํตํด ์ด๋ฅผ ์ํํ๋ ค๊ณ ํฉ๋๋ค. ์๋์ ์ธ ์ด๋ฒคํธ๊ฐ ์ด๊ฒ์ ์ผ๋ถ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ 2019๋
์ด์ ์ด๊ฒ์ ์๋ํ๊ณ ์ง์ ์ผ๋ก ์ต์ํ์ ์ด๋ฒคํธ ์์คํ
์ ๋ด๋ถ ํ
์คํธ์์ ์ ์๋ํ์ง ์์์ต๋๋ค. React๊ฐ ํ๊ณ ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ทํ ์์
์ ์ฌ์ ํ โโ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด๋ contentEditable
๋ฅผ ์ฌ์ฉํ๋ ๋ฆฌ์น ํ
์คํธ ์
๋ ฅ ํธ์ง๊ธฐ์ ๊ฐ์ ํ์ ์์ญ์์ ์ ์ฉํฉ๋๋ค. ์ฆ, ์ด๋ฒคํธ๋ฅผ ๋ฃจํธ์ ์ฐ๊ฒฐํ๋ ์์
์ ์ผ๋ถ๋ก ์ด๋ฒคํธ ์์คํ
์์ ๋ง์ ์ถ์ํ๋ฅผ ์ ๊ฑฐํ์ฌ ํฅํ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. React 17์ ์ผ๋ถ๋ก ๋ง์ ํผ๋์ ์ผ๊ธฐํ "์ด๋ฒคํธ ํ๋ง"์ ์ ๊ฑฐํ๊ณ ๋ ์ด์ onScroll
์ด๋ฒคํธ๋ฅผ ๋ฒ๋ธ๋งํ์ง ์์ต๋๋ค. React 18์์ ๋ฏธ๋์ด ์ด๋ฒคํธ์ ๋ฒ๋ธ๋ง์ ์ค์งํ์ฌ React ๋์์ ๋ธ๋ผ์ฐ์ ์ ๋ ๊ฐ๊น๊ฒ ๋ง๋ค ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ์๋ก์ด ์ด๋ฒคํธ ์์คํ
์ผ๋ก ์ฝ๊ฐ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฝํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์์
์ค์ธ ์๋ก์ด ๊ธฐ๋ฅ์ ์ํด ์ฌ์ฉ๋์์ผ๋ฏ๋ก ์ ์ฒด์ ์ผ๋ก ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์๋ก ์ด์ด์ง์ง๋ ์์ ๊ฒ์
๋๋ค.
className
โclass
(https://github.com/facebook/react/issues/4331, https://github.com/facebook/react/issues/13525#issuecomment- ์ฐธ์กฐ) 417818906 ์๋). ์ด๊ฒ์ ์์์ด ์ ์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธclass
๋ฅผ React 16์์ DOM ๋ ธ๋๋ก ์ ๋ฌํ๋ ๊ฒ์ ํ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์์ฑํ๋ ํผ๋์ ๋ณดํธํ๋ ค๋ ๊ตฌ๋ฌธ ์ ํ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ณ๊ฒฝ์ ์์ฒด์ ์ผ๋ก ์ํํ์ง ์์ ๊ฒ์ด์ง๋ง ์์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๊ฒฐํฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ตฌ์ฑ ์์ ์ํ๊ณ๊ฐ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ์์ด ๋ ๋ค ํ์ฉํ ์๋ ์์ต๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ ๋ ๋ค ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํ๋ฉฐ ์ถฉ๋ํ ์ํ์ด ์์ต๋๋ค. ๋ง์ ๊ตฌ์ฑ ์์๊ฐclassName
๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก(์: ์ถ๊ฐํ์ฌ) ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์ด๊ฒ์ ์ ์์์์ ๊ฐ์ฅ ๋
ผ์์ ์ฌ์ง๊ฐ ์๋ ๋ถ๋ถ์ด์์ต๋๋ค. ๊ทธ ์ดํ๋ก ์ฐ๋ฆฌ๋ ํจ์ ์ปดํฌ๋ํธ ์์ฑ์ ๊ถ์ฅํ๋ Hooks๋ฅผ ์ถ์ํ์ต๋๋ค. ํจ์ ๊ตฌ์ฑ ์์์์๋ ์ผ๋ฐ์ ์ผ๋ก props์ ๋ํด ๊ตฌ์กฐ ํด์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฏ๋ก { class, ... }
๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ด ์ค์ ๋ก ์ํํ๊ธฐ์ ์ถฉ๋ถํ ์ธ์ฒด ๊ณตํ์ ์ธ์ง ๋ช
ํํ์ง ์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋์ ์ด๊ฒ์ ๋ค์ ๋ฐฉ๋ฌธํ๊ฑฐ๋ ์ต์ํ class
๋ฅผ ๊ฒฝ๊ณ ํ์ง ์๊ณ ์ฌ๋๋ค์ด ์ํ๋ ๊ฒ์ ํ๋๋ก ํ๋ ๊ฒ์ด ๊ทธ๋ด๋ฏํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ์ด ์์ด๋์ด๋ฅผ ๋ณด๋ฅํ ๊ฒ์
๋๋ค.
์๋
ํ์ธ์, ์ข์ ๊ธฐ์ฌ์
๋๋ค!
React-DOM ์ ํ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํ ํ์ดํ๋ผ์ธ ๊ณํ์ด ์๋์ง ์๊ณ ์ถ์์ต๋๊น? ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๊ฐ 100KB ์ด์์ React-DOM JS ๋ฐ ๊ธฐํ ๋ชจ๋์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ฏ๋ก ์ฌ์ ํ ์ค๋ฒํค๋์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฑ๋ณ JS.
์ฝํ
์ธ ๊ฐ ํ๋ถํ ํ์ด์ง์ ๊ฒฝ์ฐ ๋ ํฐ ์ฐจ๋จ ๋ฐ ๋ ํฐ TTI๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ธ์ ๊ทธ๋ฌํ ๋ณํ๋ฅผ ๋ณผ ์ ์์ต๋๊น?
@morevolk-latei ์ธก์ ์ 100KB์ ReactDOM์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
className
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ธํ๊ณ ์ด ๋ชจ๋ ์ ์ ์ข์ํฉ๋๋ค. ๋ค๋ฅธ ์ง์ ์ด ์ถ๊ตฌํ๋ ๋ชฉํ(DOM API์ ์ผ์น)์ ์์ ํ ๋ชจ์๋๋ ๊ฒ ๊ฐ์ต๋๋ค. React๋ HTML ์์ฑ์ด ์๋ DOM ์์ฑ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค(์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์์ ์์๋ ๋ช ํํ ์ค๋ช ๋จ). DOM ์์ ์์ฑ์ ์ด๋ฆ์className
๊ฐ ์๋๋ผclass
์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด React์์ ์ด๋ฆ์ดclass
์ธ ์ด์ ๋ ๋ฌด์์ ๋๊น?