props ํ์ฉ component์ props ๋์์ธ ํจํด์ ์์๋ณด์ props ์ค๊ณ props ์ ๊ฐ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋ props ๊ฐ์ฒด๋ฅผ ์ ๊ฐ(spread) ํ์ฌ ์ปดํฌ๋ํธ์ ๋ด๋ถ์ ๊ตฌ์กฐ์ ๋ชจ๋ ์ถ๊ฐํ ์ ์๋ค. ๋ค๋ง, props ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ฐํ์์ ๋ ์ฌ์ฉ๋ external๊ณผ ๊ฐ์ ๋น ํ์ค ์์ฑ์ ์ค๋ฅ๋ฅผ ๋ฐ์ ์ํด > ์ด๋ฐ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋ props์์ ๋น ํ์ค ์์ฑ์ ๊ฑธ๋ฌ๋ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค. props ๊ฒ์ฌ propTypes๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋ props๋ฅผ ๊ฒ์ฌ className ๋ณํฉ props ์ ๊ฐ ์ฝ๋์ ์์์ ๋ฐ๋ผ ๊ธฐ์กด ์์ฑ์ ๋ฎ์ด์ฐ๊ฑฐ๋, ์ ๋ฌ๋ ์์ฑ์ด ๋ฎ์ด์จ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ > ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์กฐ๊ฑด ์ฒ๋ฆฌ ํ๊ฑฐ๋, classnames ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉ as ์์ฑ ์ปดํฌ๋ํธ ๋ด๋ถ์ DOM ๋ ธ๋ ์ค ํน์ ๋ ธ๋๋ฅผ ์ธ๋ถ์์ ๋ณ๊ฒฝํ ์ ์๋๋ก
Styled Component React ์ปดํฌ๋ํธ ์์คํ ๊ตฌ์กฐ์์ CSS๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํ library ๊ณต์๋ฌธ์ JavaScript๋ก CSS ์์ฑ React, React Native์์ ํ์ฉ ๊ฐ๋ฅ Styled Component ํน์ง 1. CSS -> JavaScript ์๋ ๋ณ๊ฒฝ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์ถ์ ํด CSS๋ก ์์ฑ๋ ์คํ์ผ์ React์์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ JS ์คํ์ผ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝ 2. ๊ณ ์ ํ class ์์ฑ ์ค์ ๋ ๋๋ง ๋ ๋, DOM ์์์ ๊ณ ์ ํ class ์์ฑ ์ด๋ฆ์ ์ค์ 3. ์ปดํฌ๋ํธ์์ CSS ๊ด๋ฆฌ ์คํ์ผ์ด ํน์ ์ปดํฌ๋ํธ์ ๋ฌถ์ฌ ์์ด, ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ๋ถํ์ํ ์คํ์ผ ์ฝ๋๊ฐ ๋จ์์์ง ์๋๋ค. ์ฆ, ์ฌ์ฉ๋ ์ปดํฌ๋ํธ ์คํ์ผ ์ฝ๋๋ง ๋ ๋๋ง ๊ณผ์ ์์ ์ฒ๋ฆฌ๋จ
React Hooks ํ (Hook)์ ํจ์ํ ์ปดํฌ๋ํธ์ ๋ฆฌ์กํธ์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ ๊ฐ๊ณ ๋ฆฌ์ฒ๋ผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ Hook์ React v16.8๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ก์ด ๊ธฐ๋ฅ ๋ฆฌ์กํธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ Hook๋ค์ use๋ก ์์ํ๋ ํจ์๋ค Hook์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ์ํธ ๋ ๋๋ง ๊ณผ์ ์์ ํญ์ ๊ฐ์ ์์๋ก ํธ์ถ๋๋ ๊ท์น์ ์ด์ฉํ์ฌ ํธ์ถ์์๋ฅผ ์ด์ฉํ์ฌ ์ํ ๋งค์นญ ํ (Hook)์ ๊ท์น React ํจ์ํ ์ปดํฌ๋ํธ ์์์๋ง ์ฌ์ฉ ์ปดํฌ๋ํธ ์์ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ์์์ ํ ์ฌ์ฉ โ useState React์ useState()๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ์๋ state๋ฅผ ์ค์ ํ ์ ์๋ค. state์ state๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์๋ฅผ ์์ผ๋ก ์ ๊ณต useState()๋ ์ ๋ฌ ๋ฐ๋ ์ธ์๋ก state์ ์ด๊ธฐ ๊ฐ์ ์ค์ (์ฒซ ๋ ๋๋ง ๋ ๋ ๋ฑ ํ๋ฒ ์ฌ์ฉ) ํด๋์ค ์ปดํฌ๋ํธ์ this.state์ ์ฐจ์ด์ `use
HOC(Higher-Ordered Component) > ๊ณ ์ฐจ(้ซๆฌก) ๊ณ ์ฐจ(Highter-order)์ ์๋ฏธ๋ '์์ ์ฐจ์(์์ค)'์ด๋ค. ์ฌ์ ์ ์๋ฏธ๋ '์๊ฐ์ด๋ ํ๋ ๋ฐ์์ ์์ค์ด๋ ์ ๋๊ฐ ๋์ ๊ฒ'์ ๋งํ๋ฉฐ ์ํ์์๋ '๋์ ์ฐจ์(3์ฐจ ์ด์)'์ ๋ปํ๋ค. (๊ณ ์ฐจ ๋ฐฉ์ ์, ๊ณ ์ฐจ ๋ถ๋ฑ์) ๊ณ ์ฐจ ํจ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ํจ์๋ ๊ฐ(value)์ผ๋ก ์ทจ๊ธ๋๋ค. ์ฆ, ํจ์์ ์ซ์, ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฏ ํจ์ ๋ํ ๋ค๋ฅธ ํจ์์ ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์๋ฅผ ๊ฐ์ผ๋ก ๋ฐํํ๋ ๊ฒ๋ ๊ฐ๋ฅ ํ๋ ์ด์์ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค. ((fn) => {}) ํจ์๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฐํ ํ๋ค. (() => fn) ๊ณ ์ฐจ ์ปดํฌ๋ํธ ์ปดํฌ๋ํธ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ React ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ React API๋ ์๋์ง๋ง, React ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ํ์ฉ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌ ๋ฐ์ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ๋ฐํํ๋ ํจ์ >
Form Control ์ ๋ ฅ๊ฐ์ ๋ฐ๋ element๋ค์๊ฒ value๊ฐ์ผ๋ก state๋ฅผ ๊ฑธ์ด์ฃผ๊ณ setState() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ค๋ค. Controlled ์ปดํฌ๋ํธ React ์ปดํฌ๋ํธ๋ ํผ์ ํตํด ์ ๋ ฅ๋ ์ฌ์ฉ์์ ๊ฐ์ ์ ์ด ํ ์ ์๋ค. React๋ฅผ ํตํด ๊ฐ์ด ๊ด๋ฆฌ๋๋ ์ ๋ ฅ ์์๋ ์ปจํธ๋กค ์ปดํฌ๋ํธ(Controlled Component)์ด๋ค. Controlled Component๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ state์ ์ ๋ฐ์ดํธ๋ ์ฐ๊ฒฐ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ํด ์ฒ๋ฆฌ ๋๋ค. Controlled Component๋ฅผ ํตํด ์ฌ์ฉ์์ ์ ๋ ฅ ๋ด์ฉ์ ์ ๋ฐ์ดํธ ํ๊ฑฐ๋, ์ ํจ์ฑ๊ฒ์ฌ ์ํ์ด ๊ฐ๋ฅํ๋ค. ๋ฉํฐ ์ด๋ฒคํธ ํธ๋ค๋ง ํ๋ ์ด์์ ``์ ํ๋์ ๋ฆฌ์ค๋๋ก ์ปจํธ๋กค ํ ์ ์๋ค. ์ฌ๋ฌ ๊ฐ์ ์ปจํธ๋กค์ ์ ์ดํ๊ธฐ ์ํด์๋ name ์์ฑ์ ์ค์ ํด์ผ ํ๋ค. TextArea Controll Reac
Context API Context๋ React ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ธ๋ก๋ฒ(Global)ํ๊ฒ ๊ณต์ ํ ์ ์๋๋ก ๊ณ ์๋ ๋ฐฉ๋ฒ React๋ ๋ณต์กํ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์ํ ๊ณต์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก Context API๋ฅผ ์ ๊ณตํ๋ค. Context API๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์ปดํฌ๋ํธ์์ ํ์์ ์ข ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธ(Provider)ํ ํ, ํน์ ์์น์ ์ปดํฌ๋ํธ์์ ๋ฐ๋ก ์์(Consumer)ํ๋๋ก ์ค์ ํ ์ ์๋ค. .png) > Context์ ์ฃผ๋ ์ฌ์ฉ ๋ชฉ์ ์ ๋ณต์กํ๊ฒ "์ค์ฒฉ ๋" ํ์ ์ปดํฌ๋ํธ(๋ค)์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ Context๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ด ์ด๋ ค์ฐ๋ฏ๋ก ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ!! ์ปจํ ์คํธ ์์ฑ React.createContext A
์ปดํฌ๋ํธ ํต์ ์ปดํฌ๋ํธ๋ ๋ก์ปฌ ๋ฐ์ดํฐ์ธ state(์ํ)๋ฅผ ๊ฐ์ง ์ ์๋ค. React ํ๋ก๊ทธ๋๋ฐ์์๋ ์์ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ๊ฐ ํ์ํ state๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ํต์ ํ์ฌ state๋ฅผ ๊ณต์ ํ๋ค. ์ฆ, props๊ฐ์ฒด๋ฅผ ํตํด ์์ ์ปดํฌ๋ํธ์ state๋ฅผ ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌ > ์ค์ฝํ ์ฒด์ธ(Scope Chain) ์ผ๋ฐ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ํ๊ฒฝ์ธ Javascript๋ ์ค์ฝํ ์ฒด์ธ์ ์ํด ์์(๋ถ๋ชจ) ์์ญ์ผ๋ก ๊ฑฐ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ง๋ง, React์์๋ ๊ฐ ์ปดํฌ๋ํธ์ state(์ํ)๋ฐ์ดํฐ๊ฐ ์ค์ฝํ ์ฒด์ธ๋์ง ์๋๋ค. ๋ฉ์๋(ํจ์) ์ ๋ฌ ์์ ์ปดํฌ๋ํธ๋ props๋ฅผ ํตํด ํ์ ์ปดํฌ๋ํธ์ ์์ฑ์ ์ ๋ฌ ํ ์ ์๋ค. ์ปดํฌ๋ํธ์ ํจ์ ๋ํ ์์ฑ์ด๋ฏ๋ก props๋ก ์ ๋ฌํ ์ ์๋ค. ํ์ ์ปดํฌ๋ํธ๋ ์ ๋ฌ ๋ฐ์ ๋ฉ์๋๋ฅผ ํน์ ์์ ์ ์คํ(callback)ํ์ฌ ์์ ์ปดํฌ๋ํธ์ ์ํ์ ์ ๊ทผํ์ฌ ์ ๋ฐ์ดํธ ๊ฐ๋ฅ ์ํ ๊ณต์
์ด๋ฒคํธ ํธ๋ค๋ง React ์์์์ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋ง ํ๋ ๋ฐฉ์์ DOM ์์์ ์ด๋ฒคํธ ํธ๋ค๋ง ๋ฐฉ์๊ณผ ์ ์ฌ |์ฐจ์ด์ |์์| |--|--| |์ด๋ฒคํธ ์์ฑ์ด๋ฆ์ camelCase ํ์์ผ๋ก ์์ฑ|onClick, onKeyDown, onFocus, onChange ๋ฑ| |์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฐ๊ฒฐ์ JSX ์ธํฐํด๋ ์ด์ |``| |๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์ง์ง|event.preventDefault() ๋ฉ์๋๋ง ํ์ฉ| React์ ํฉ์ฑ ์ด๋ฒคํธ > React์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์ผํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ฒคํธ ๋ํผ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋๋ค. ํฉ์ฑ(Synthetic)์ด๋ฒคํธ ๊ฐ์ฒด๋ preventDefault,stopPropagation๋ฉ์๋๋ฅผ ํฌํจํ๋ฉฐ ์ธํฐํ์ด์ค๋ ๋ธ๋ผ์ฐ์ ์ ํ์ค ์ด๋ฒคํธ ๋ชจ๋ธ๊ณผ ๋์ผ React ์ด๋ฒคํธ ํธ๋ค๋ง React ์ด๋ฒคํธ ์ฐ๊ฒฐ์ ์ด๋ฒคํธ ์์ฑ ์ด๋ฆ ํ๊ธฐ๋ camelCase
Life Cycle ์๋ช ์ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์์๊ฐ๊ฐ ๋ณํ(ํ์ด๋จ -> ์ฑ์ฅ(๋ณํ) -> ์ฃฝ์)ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ปดํฌ๋ํธ๋ ์ด๋ฌํ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ๋ค์ํ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๊ฐ ์ ๊ณต๋๋ค. Life Cycle Method ์ปดํฌ๋ํธ์ ๋ผ์ดํ ์ฌ์ดํด์ ํฌ๊ฒ ๋๋๋ฉด ๋ค์์ 3๋จ๊ณ๋ก ์งํ๋จ Mount ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ DOM์ ์ฝ์ ํ ๋ ๋ค์ ์์ผ๋ก ๋ฉ์๋ ์คํ๋จ ๋ถ๋ชจ ์์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ผ์ดํ์ฌ์ดํด ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ ์์ฑ ๋ถ๋ชจ ์ปดํฌ๋ํธ render() ์์ ์ปดํฌ๋ํธ
State(์ํ) ์ปดํฌ๋ํธ UI๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ์ค๋ธ์ ํธ state(์ํ)๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฆฌ์กํธ๊ฐ ์๋์ผ๋ก render()๋ฅผ ํธ์ถ state๋ ์ปดํฌ๋ํธ๊ฐ ์์ ํ ๋ก์ปฌ ๋ฐ์ดํฐ๋ก ์ ์ฉ ๋ฒ์๋ ํ์ฌ ์ปดํฌ๋ํธ์ ํ์ ๋๋ค. ์ปดํฌ๋ํธ๋ ์์ ์ state๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ ์ ์๋ค. state๋ ๋ถ๋ณ(Immutable) ๊ฐ์ฒด์ด๋ค. ์ฆ, ๊ฐ์ฒด์ ๋ณํ์ ๊ฐํด์ ์๋๋ค. ๋ณํ์ ๊ฐํ๋ ๋์ , ๋น๊ต๋ฅผ ํตํด ๊ต์ฒดํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ ์งํ๋ค. Immutable ๊ฐ์ฒด์ ์ฌ์ฉ ์ด์ > ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋ฅผ ํตํด ๊ณต์ ๋์ด ์๋ค๋ฉด ์ํ๊ฐ ์ธ์ ๋ ์ง ๋ณ๊ฒฝ ๋ ๊ฐ๋ฅ์ฑ๋ ์ปค์ ธ ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋๋ค. ๋ฐ๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ ๋ ๊ฐ์ฒด ์ ์ฒด๊ฐ ์๋๋ผ ๋จ์ ์ฐธ์กฐ๋ง ๋ณต์ฌํ๊ณ ๋๋ธ๋ค. ์ฐธ์กฐ๋ ๋ณดํต ๊ฐ์ฒด ๊ทธ ์์ฒด๋ณด๋ค ํจ์ฌ ์์์(์ ํ์ ์ผ๋ก ํฌ์ธํฐ ํฌ๊ธฐ), ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๊ฐ๋๋ฉฐ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ํฅ์
Props(์ ๋ฌ์์ฑ) ์ปดํฌ๋ํธ ๋ฐ์์ ์ฃผ์ด์ง๋ ๋ฐ์ดํฐ > props๋ ๋ถ๋ชจ -> ์์์ผ๋ก ๋จ๋ฐฉํฅ(1-way) ํ๋ฆ์ผ๋ก ์ ๋ฌ๋๋ค. ์ปดํฌ๋ํธ์ ์ค์ ๋ ์์์ JSX ์์ฑ(type, children ๋ฑ)์ React์ ์ํด ์ปดํฌ๋ํธ์ ์์ฑ(props) ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ค. ์ ๋ฌ๋ ๊ฐ์ props ๊ฐ์ฒด์ ๊ฐ ์์ฑ์ผ๋ก ์ค์ ๋๋ค. ์ ๋ฌ๋ ์ปดํฌ๋ํธ ์์ฑ ๊ฐ์ฒด props๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ปดํ์ผ์ ํ์ฉ๋๋ค. ์ปดํฌ๋ํธ์ ์ ๋ฌ๋ ์์ฑ(props)๊ฐ์ฒด๋ ์ฝ๊ธฐ ์ ์ฉ(readonly) ์ ๋ฌ ๋ฐ์ props ๊ฐ์ ์์ ํ๋ฉด ์๋๋ค. ์ ๋ฌ ๋ฐ์ props ๊ฐ์ ์์ ํ๋ ๋์ ์ปดํฌ๋ํธ ์ํ(state)๋ฅผ ํ์ฉ ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์!! props.children vue.js์ slot๊ณผ ๊ฐ์ ๊ฐ๋ data binding์ ๋ฐ๊นฅ(๋ถ๋ชจ)์์ ํด์ค ๊ฒ!! component์ content๋ฅผ children์ด๋ผ๋
Virtual DOM React๋ ์ํ ๋ณ๊ฒฝ์ด ๊ฐ์ง๋๋ฉด Virtual DOM์ ๋ค์ ๊ทธ๋ ค ์ค์ DOM์ ์ ๋ฐ์ดํธ ํ๋ค. ์ฆ์ DOM ์กฐ์์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์๋๊ฐ ๋๋ ค์ง๋ค. React๋ Virtual DOM์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ(์๋)์ ํฅ์์ํค๋ ๋ฐฉ์์ ์ฑํ Virtual DOM์ ์ปดํฌ๋ํธ๋ฅผ ์ง์์ ์ผ๋ก ๊ด์ฐฐํ์ฌ ์ํ ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ ค ์๋ Virtual DOM์ ์ด์ , ์ดํ ๋น๊ต๋ diff ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๋น๊ต ๊ฒฐ๊ณผ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ฉด ์ค์ DOM์ ๋ฐ์ํด UI๋ฅผ ์ ๋ฐ์ดํธ ReactDOM ReactDOM ๋ชจ๋์ React ์์๋ก ๊ตฌ์ฑ๋ Virtual DOM์ ์ค์ DOM์ ์ฅ์ฐฉ(Mount)์์ผ ๋ ๋๋ง(Rednering)ํ๋ ์ญํ ์ ์ํ > ReactDOM.render ๋์ ๋ฐฉ์ domNode์ ์ฝํ ์ธ ๋ฅผ ์ ์ดํฉ๋๋ค. ์ฒ์ ํธ์ถํ ๋ ๊ธฐ์กด์ DOM ์์๋ฅผ ๊ต์ฒดํ๋ฉฐ, ์ดํ ํธ์ถ์์๋ React์ DOM ๋น๊ต(
JSX(Javascript Syntax eXtension) JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ JSX๊ฐ ํ๋ ์ผ์ React ์์(element)๋ฅผ ๋ง๋๋ ๊ฒ React ์์๋ ์ค์ DOM ์์๊ฐ ์๋ Js ๊ฐ์ฒด JSX๋ HTML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ html์ฒ๋ผ ๊ฐํธํ๊ฒ ๋งํฌ์ ๊ฐ๋ฅ {}๋ฅผ ์ด์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ ์ ์๋ค. JSX๋ ํํ์ if ๊ตฌ๋ฌธ ๋ฐ for loop ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , ๋ณ์์ ํ ๋น ๋ฐ ์ธ์๋ก ๋ฐ์๋ค์ด๊ณ ํจ์๋ก ๋ฐํ ๊ฐ๋ฅ ๋ค์์ ํ๊ทธ๋ฅผ ๋ฆฌํดํ ์ ์๋ค. (ํ์ ๋ ธ๋ ์ฌ์ฉ๋ถ๊ฐ) ํ ๊ฐ์ง ํ๊ทธ๋ก ๊ฐ์ธ์ค์ผํ๋ค. ๋จ์ํ ๋ฌถ์ด์ค๋๋ ` ๋๋ ` ํ๊ทธ๋ฅผ ์ฌ์ฉ HTML๊ณผ ์ฐจ์ด์ JSX๋ HTML๋ณด๋ค JS์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ React DOM์ HTML attribute ๋์ camelCase ํ๋กํผํฐ ๋ช ๋ช ๊ท์น์ ๋ฐ๋ฆ -
React Components ํ๋ฉด์์ ๋ณด์ฌ์ง๋ UI ๋จ์ react library๋ฅผ ์ด์ฉํ์ฌ component ์ค๊ณ๋ฐฉ๋ฒ์ผ๋ก class, function์ด ์๋ค. ์ปดํฌ๋ํธ ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์ํ๋ PascalCase ๋ฌธ๋ฒ ์ฌ์ฉ์ ๊ถ์ฅ HTML ํ์ค ์์์ ๊ตฌ๋ถํ๊ธฐ ์ํด > ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๋๋ ๊ฒ์ ๋ ํฐ ์ฑ์์ ์์ ํ ๋ ๋๊ฐ์ ๋ํ๋ ๋๋ค. UI ์ผ๋ถ๊ฐ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋๊ฑฐ๋ (Button, Panel, Avatar), UI ์ผ๋ถ๊ฐ ์์ฒด์ ์ผ๋ก ๋ณต์กํ (App, FeedStory, Comment) ๊ฒฝ์ฐ์๋ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ง๋๋ ๊ฒ ์ข์ต๋๋ค. Class Component react์์ ์ ๊ณตํ๋ 'Component Class'๋ฅผ ์์ํด์ ๋ง๋ค ์ ์๋ค. component์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ state Object๊ฐ ์๊ณ ์ํ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ ๋๋ง๋๋ค. state๊ฐ ๋ณ๊ฒฝ์ด๋๋ฉด
๐ค React.js๋..? Facebook ์ํํธ์จ์ด ์์ง๋์ด Jordan Walke์ ์ํด ํ์ ํ๋ ์์ํฌ๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ๋ก ์ ํด์ง ๊ณจ๊ฒฉ์ด ์์ผ๋ฏ๋ก ์ํ๋ ๊ตฌ์กฐ๋ก ์ค๊ณ ํ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณจ๋ผ ์ฌ์ฉ ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ ํ์ฑ์ผ๋ก ์ธํด ๋ฌธ์ํ๊ฐ ์๋์๋ค. ์ ์ธํ(Declarative) ํ๋ก๊ทธ๋๋ฐ Re-render the whole app on every update ์ ๋ฌ ์์ฑ props, ์ํ state ๋ณ๊ฒฝ ๊ฐ์ง -> UI ์๋ฐ์ดํธ(Rendering) ์ปดํฌ๋ํธ(Component)๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์บก์ํ ๋ ์ปดํฌ๋ํธ ๋ก์ง(Logic)์ ํ ํ๋ฆฟ(Template)์ด ์๋, JSX(Javascript XML) React(web), React Native(mobile app), React Electron(desktop app) 1์ 3์กฐ React concep React๋ UI ์ ์