[React.js] what is React
- 1. ์ ์ธํ
- 2. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ
- 4. ์ปดํฌ๋ํธ
- 5. ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
- 6.ย React์์ ๋ฐ์ดํฐ์ ํ๋ฆ๊ณผ State ๋์ด์ฌ๋ฆฌ๊ธฐ
- 7. ์กฐ๊ฑด๋ถ ๋ ๋๋ง
- 8. ๋ฆฌ์คํธ์ Key
- 9. ๋ฆฌ์กํธ๋ก ์๊ฐํ๊ธฐ
๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์ ํํ์ด์ง์ ๊ฐ๋ฉด ๊ฐ์๋ง์ ๋ฆฌ์กํธ๋ ์ ์ธํ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ด๋ผ๋ ํค์๋๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
๋ฆฌ์กํธ์ ํน์ง์ ์์ฃผ ์ ๋ํ๋ด๋ ๋ง์ธ ๊ฑฐ ๊ฐ๋ค.
1. ์ ์ธํ
js๋ง์ผ๋ก UI๋ฅผ ๋ง๋ค๊ณ ๋ธ๋ผ์ฐ์ ์ ๋ํ๋ด๋ ค๋ฉด ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ด DOM API๋ฅผ ํตํด ํ์ํ HTML element๋ฅผ ๋ง๋ ๋ค.
document.createElement('div')
๋ฆฌ์กํธ๋ ์ด๋ฌํ ๋ฐฉ์ ๋์ JSX๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ํ๊ทธ๋ฅผ ์ง์ ๋ํ๋ผ ์ ์๋ค.
์ฆ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋ณด๊ณ ํ๋ฉด์ ์ด๋ค UI๊ฐ ๊ทธ๋ ค์ง์ง ์ถฉ๋ถํ ์์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ด ๋ฐ๋ก โ์ ์ธ์ โ์ด๋ค.
2. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ
1) Component ๋ฆฌ์กํธ์์๋ ๋ชจ๋ ๊ฒ์ด ์ปดํฌ๋ํธ์ด๊ณ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋ฆฌ์กํธ์ JSX ๋ฌธ๋ฒ์ ํตํด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ด๋ค ์ปดํฌ๋ํธ์ ๋ถ๋ถ์ด ๋๊ธฐ๋ ํ๋ค.
์ด๋ฌํ ์ปดํฌ๋ํธ ๋จ์์ ๊ฐ๋ฐ์ ์ฅ์ ์ โ์ฌ์ฌ์ฉ์ฑโ์ ์๋ค.
๋ํ ์ ์ง๋ณด์์๋ ์ฉ์ดํ๋ค.
๋ฐ๋ก ์ด๋ฌํ ๊ฒ์ด ์ปดํฌ๋ํธ ๋จ์ ๊ฐ๋ฐ์ ์ฅ์ ์ด๋ค.
2) JSX
JSX๋ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ง ์ฌ์ฉ๋๋ ์ปค์คํ ํ ๋ฌธ๋ฒ์ด๋ค.
๊ฐ๋จํ๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ + HTML ๋ฌธ๋ฒ์ ์กฐํฉ์ด๋ค.
์ฃผ์ํ ์ ์ ๋ชจ๋ JSX ๋ฌธ๋ฒ ๋ด์์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ค๊ดํธ {} ์์์๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฆฌ์กํธ๋ฅผ ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฐ์ ์ JSX ๋ฌธ๋ฒ์ ์ต์ํด์ ธ์ผํ๋ค.
์ด๋ฌํ JSX ๋ฌธ๋ฒ์ ํน์ง์ โ์ ์ธ์ โ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
3) ์๋ฆฌ๋จผํธ
Element๋ ๋ฆฌ์กํธ์ ๊ฐ์ฅ ์์ ๋จ์.
์ฆ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๊ฐ ๋ชจ์ฌ ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑ.
๋ํ ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ ๋ถ๋ณ ๊ฐ์ฒด๋ค. ํ ๋ฒ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ์ดํ์๋ ์๋ฆฌ๋จผํธ์ ์์์ด๋ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ด๋ฌํ ์๋ฆฌ๋จผํธ๋ฅผ DOM ๋ ธ๋์ ๋ ๋๋ง ํ๋ ค๋ฉด ReactDOM.render() ๋ฉ์๋๋ฅผ ํตํด ํ ์ ์๋ค.
4. ์ปดํฌ๋ํธ
1) ํจ์ํ ์ปดํฌ๋ํธ
๋ฆฌ์กํธ = ์ปดํฌ๋ํธ๋ผ๊ณ ์๊ฐํด๋ ๋ ๋งํผ ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ฅ ์ค์ํจ.
๋ฆฌ์กํธ์ ๋ชจ๋ ๊ฒ์ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ props๋ผ๊ณ ํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ์ ๋ง์๋๋ก ์ธ ์ ์๋ค.
๋ฆฌ์กํธ๋ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ก ์์ฑ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด JSX ์ดํธ๋ฆฌ๋ทฐํธ์ ์์์ ํด๋น ์ปดํฌ๋ํธ์ ๋จ์ผ ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ค.
๊ทธ ๊ฐ์ฒด๊ฐ props์ด๋ค.
์ปดํฌ๋ํธ๋ ํญ์ ๋๋ฌธ์๋ก ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์๋ผ๋ ๊ฒ ์์ฒด๋ ํ ๊ฐ์ง ๊ธฐ๋ฅ๋ง ํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ํจ์ํ ์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ฑ์ ๊ณ ๋ คํด ๋ถ๋ฆฌ์ํค๋ ๊ฒ์ด ์ข๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ย props๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ผ๋ ๊ฒ์ด๋ค.
ํจ์ ์ปดํฌ๋ํธ๋ ํด๋์ค ์ปดํฌ๋ํธ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์์ฒด props๋ฅผ ์์ ํด์๋ ์๋๋ค.
๊ทผ๋ฐ ๋ถ๋ช ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ผ ํ๋ ์ผ์ด ์๊ธธ ๊ฒ์ด๋ค.
์ด๊ฒ์ ๋ค์ ํด๋์ค ์ปดํฌ๋ํธ์ state๋ผ๋ ์์ฑ์ ํตํด ์์ ์์ฌ๋ก ์ถ๋ ฅ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ๋ฆฌ์กํธ์์๋ ๋ฌด์ธ๊ฐ ๋ณ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฐ์ดํฐ๋ state๋ก ๋ฐ๋ก ๊ด๋ฆฌ๋ฅผ ํ๋ฉฐ
props๋ฅผ ํตํด ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ปดํฌ๋ํธ ๋ด์์ ์ฌ์ฉํ ์ ์๋ค.
2) ํด๋์ค ์ปดํฌ๋ํธ์ state์ ์๋ช ์ฃผ๊ธฐ
ํด๋์ค ์ปดํฌ๋ํธ๋ React.Component๋ฅผ ์์ํ๋๋ก extends ํค์๋๋ฅผ ํตํด ๋ง๋ค์ด๋ผ ์ ์๋ค.
ํด๋์ค ์ปดํฌ๋ํธ์์ render ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉด ๋ฆฌ์กํธ๋ย state์ ๋ณํ๊ฐ ์๊ธธ ๋๋ง๋ค render ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ๋ ํญ์ props๋ก ๊ธฐ๋ณธ constructor๋ฅผ ํธ์ถํด์ผ ํ๋ค.
์คํ ์ดํธ๋ ์ง์ ์์ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ง์ ์์ ํด์๋ ์๋๋ค ์ง์ ์์ ํ๋ฉด ๋ฆฌ์กํธ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํ์ง ์๋๋ค
๊ทธ ๋์ ์ย setState ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์์
์ํ๋ ๋ก์ง๋๋ก ์คํ์ด ์ ๋ ์๋ ์๋ค.
5. ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ DOM ์๋ฆฌ๋จผํธ์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค.
๋ฆฌ์กํธ์ ์ด๋ฒคํธ๋ ์๋ฌธ์ ๋์ ์บ๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
JSX๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ด ์๋ ํจ์๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ๋ฌํ๋ค.
๋ฆฌ์กํธ์์ ๊ธฐ๋ณธ ๋์์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ๋ฐ๋์ preventDefault๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ค.
๋ฐ๋์ this ๋ฐ์ธ๋ฉ
6.ย React์์ ๋ฐ์ดํฐ์ ํ๋ฆ๊ณผ State ๋์ด์ฌ๋ฆฌ๊ธฐ
!๋ฆฌ์กํธ์์ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋จ๋ฐฉํฅ์ด๋ค.
์ฆ ํ์ ์ปดํฌ๋ํธ์์ ๋ฐ์ props๋ ๋ช ๋ฒ์งธ ๋ถ๋ชจ์์ ๋ด๋ ค์จ ๊ฑด์ง ์ธ์งํ์ง ๋ชปํจ
state ๋์ด์ฌ๋ฆฌ๊ธฐ๋ ํ์ ์ปดํฌ๋ํธ์์์ ์ด๋ค ์ด๋ฒคํธ๋ ๋ฌด์ธ๊ฐ์ ๋์์ผ๋ก state๋ฅผ ๋ณํ์ํค๋ ค๋ ๊ฒฝ์ฐ๋ค.
ํ์ ์ปดํฌ๋ํธ์ props๋ฅผ ํตํด ๋ถ๋ชจ์์ ์์ฑํ ํจ์๋ฅผ ์ ๋ฌํ๊ณ ํด๋น ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ์์ ์คํ์์ผย state๋ฅผ ๋ณํ์ํฌ ์ ์๋ค.
๋ํ ๊ฐ๋จํ ์ฑ์ ๊ฒฝ์ฐ ํํฅ์์ผ๋ก ์ฑ์ ๋ง๋ค ์๋ ์์ง๋ง ๋๊ท๋ชจ ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ ์์ ๋จ์(์ปดํฌ๋ํธ)๋ถํฐ ๋ง๋ค๊ณ ์ ์ ๋ ๊ท๋ชจ๋ฅผ ํค์ฐ๋ ์ํฅ์์ผ๋ก ์ฑ์ ๋ง๋ ๋ค.
7. ์กฐ๊ฑด๋ถ ๋ ๋๋ง
๊ธฐ์กด์ if else ๊ตฌ๋ฌธ, ์ผํญ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ ๋ฑ์ ํตํด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ํ๋ ์ปดํฌ๋ํธ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ ๋ ํ ์ ์๋ค
8. ๋ฆฌ์คํธ์ Key
Key๋ React๊ฐ ์ด๋ค ํญ๋ชฉ์ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ญ์ ํ ์ง ์๋ณํ๋ ๊ฒ์ ๋๋๋ค.
key๋ ์๋ฆฌ๋จผํธ์ ์์ ์ ์ธ ๊ณ ์ ์ฑ์ ๋ถ์ฌํ๊ธฐ ์ํด ๋ฐฐ์ด ๋ด๋ถ์ ์๋ฆฌ๋จผํธ์ ์ง์ ํด์ผ ํ๋ค.
Key๋ฅผ ์ ํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฆฌ์คํธ์ ๋ค๋ฅธ ํญ๋ชฉ๋ค ์ฌ์ด์์ ํด๋น ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ ๋ฌธ์์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ID๋ฅผ key๋ก ์ฌ์ฉํ๋ค.
๋ ๋๋ง ํ ํญ๋ชฉ์ ๋ํ ์์ ์ ์ธ ID๊ฐ ์๋ค๋ฉด ์ตํ์ ์๋จ์ผ๋ก ํญ๋ชฉ์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋ย ํญ๋ชฉ์ ์์๊ฐ ๋ฐ๋ ์ ์๋ ๊ฒฝ์ฐ key์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค.
์ด๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋๊ฑฐ๋ ์ปดํฌ๋ํธ์ state์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
9. ๋ฆฌ์กํธ๋ก ์๊ฐํ๊ธฐ
์ปดํฌ๋ํธํ ์์. ํด๋น ์ปดํฌ๋ํธ๋ ํ๋์ ์ผ๋ง์ ๋ด๋นํ๋ ๊ฒ์ด ์ข๋ค.
์ปดํฌ๋ํธ๋ก ๋๋์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค์ ๋ ๋๋ง ์คํ. (state๋ ์ ์ฉ x, props ๋ง์ ์ด์ฉ)
์ ์ ์ธ ์ฑ์ ๋ง๋ค์๋ค๋ฉด ์ด์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ state๊ฐ ๋์ด์ผ ํ๋์ง ์๊ฐํด์ผํจ.
state๊ฐ ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ค๋ฉด ์ด์ ๋ state๊ฐ ์ด๋ค ์ปดํฌ๋ํธ์ ์์นํด์ผ ํ๋์ง๊ฐ ์ค์.
๊ฐ์ ์คํ ์ดํธ๋ฅผ props์ผ๋ก ๋ฐ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๊ณตํต์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๊ฐ ์์นํด์ผํจ
- ์ด๋ฒคํธ์ ๋ฐ๋ผ ์ ์ฉํ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ state ๋์ด์ฌ๋ฆฌ๊ธฐ๋ฅผ ํตํด ํ์ ์ปดํฌ๋ํธ์ ํด๋น ๋ฉ์๋๋ฅผ props๋ก ๋๊ฒจ์ค