์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ํ
- ์๋ฐ์คํฌ๋ฆฝํธ
- html
- ์ปดํจํฐ๊ณผํ
- css
- ๋ฆฌ์กํธ
- K๋ฐฐํฐ๋ฆฌ
- ๋ฐ์ํ
- ์ฝ๋ฉ
- ์ค๋ผํด
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ค๋ธ์
- ์๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- JavaScript
- ์ฑ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๋ ์
- ๋ผํ๋ผ์ค์๋ง๋
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- Python
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ComputerScience
- Java
- ํ์ด์ฌ
- ๊ฐ๋ฐ
- ํ๋ก๊ทธ๋๋ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- database
- Today
- Total
JiYoung Dev ๐ฅ
[React] React ๋ณต์ต (๊ฐ๋ ~ context API๊น์ง) (2023.05.22) ๋ณธ๋ฌธ
[React] React ๋ณต์ต (๊ฐ๋ ~ context API๊น์ง) (2023.05.22)
Shinjio 2023. 5. 22. 19:48์ง๋์ฃผ๋ถํฐ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ๋๋ฐ ๊ตฌ์กฐ์ ๋ฌธ๋ฒ, ์ฐ๋ ์ด์ ์ ๋ํ์ฌ ์ดํด๊ฐ ์๋์ด ๋ฐ๋ก ์ ๋ฆฌํ ๋ด์ฉ!
1. ๋ฆฌ์กํธ(React)๋?
๋ฆฌ์กํธ๋, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
meta(๊ตฌ facebook)์์ ์ ๊ณตํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฃผ๋ก SPA(Single Page Application)์ ๋ง๋ค ๋ ์ฌ์ฉ
React๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์
1-1. ๊ธฐ์กด ์๋ฐ ์คํฌ๋ฆฝํธ์ ๋จ์
1) HTML๊ณผ JS๊ฐ ๊ฐ์ง ๋ถ๋ฆฌ๊ฐ & ์ง๊ด์ ์ด์ง๋ง ๋๋ฌด ๊ธด ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ
์๋ฐ์คํฌ๋ฆฝํธ์์ HTML ์์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ document.getElementById ๋ฑ ์ผ๋ก ์์ํ๋ ๊ธด ์ฝ๋ ์์ฑ์ ํตํด ์์๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์
๋ฆฌ์กํธ๋ HTML๊ณผ JS ๋ฌธ์๋ฅผ ํฉ์น JSX ๋ฅผ ์ง์
2) ์ ํ์ด์ง๋ฅผ ๋ค์ด๊ฐ ๋๋ง๋ค ์๋ก๊ณ ์นจ > ์ด๋ ์ฌ์ฉ์๊ฐ ํผ๋ก๊ฐ์ ๋๋ผ๊ฒ ํจ
React๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ ์ฒด๋ฅผ ๋ ๋๋ง ํ์ง ์๊ณ ํ์ํ ๋ถ๋ถ๋ง ๋ ๋๋งํ์ฌ SPA ๊ตฌํ ๊ฐ๋ฅ
2. ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์
2-1. Virtual DOM์ ์ฌ์ฉ
์ค์ ๋ก DOM์ ์ ์ดํ์ง ์๊ณ ์ค๊ฐ์ Virtual DOM ์ด๋ผ๋ ๊ฐ์์ DOM์ ๋์ด Virtual DOM์ด ๋ณ๊ฒฝ๋ ๋, ์ค์ DOM์ ๋ณ๊ฒฝํ๋๋ก ์ค๊ณ๋์ด์์. ์ด๋ฌํ ์์ ์ Reconciliation์ด๋ผ๊ณ ํจ. Virtual DOM์ ๋ถํ์ํ ๋ ๋๋ง ๊ณผ์ ์ ๋นํจ์จ์ฑ์ ์ต์ํํ๊ธฐ ์ํด ํ์.
2-2. ์ปดํฌ๋ํธ ๋จ์ ๊ฐ๋ฐ
์ปดํฌ๋ํธ๋ ๋ ๊ณ ๋ธ๋ญ๊ณผ ๊ฐ์ด ์์ ๋จ์๋ก ๊ฐ๋ฐํ๊ฒ์ ์กฐ๋ฆฝํ๋ฏ์ด ํฉ์น๋ ๊ฒ์ผ๋ก ์บก์ํ, ํ์ฅ์ฑ, ๊ฒฐํฉ์ฑ, ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ์ ์ด์ ์ด ์์
2-3. JSX์ ์ง์
JSX(JavaScript + XML)๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ํ์ฅ ๊ตฌ๋ฌธ์ผ๋ก ๋ฆฌ์กํธ์์ ์๊น์๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก JSX๋ ๋ฆฌ์กํธ "์๋ฆฌ๋จผํธ(Element)"๋ฅผ ์์ฑํจ
HTML๊ณผ ๊ฐ์ด ์๊ฒผ์ง๋ง ์ค์ ๋ก๋ JavaScript
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ํ์ผ์์ XMLํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด babel์ด JSX๋ฅผ JavaScript๋ก ๋ณํ
JSX ๋ฌธ๋ฒ์์ฑ ๊ท์น
1. ๊ผญ ๋ซํ์๋ ํ๊ทธ
<input />, <br /> ์ด๋ฐ์์ผ๋ก HTML์์ ๋ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ๊ทธ๋ ๋ซ์์ฃผ์ด์ผ ํจ
2. ๊ผญ ๊ฐ์ธ์ ธ์ผํ๋ ํ๊ทธ
๋๊ฐ ์ด์์ ํ๊ทธ๋ ๋ฌด์กฐ๊ฑด ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ์ผ ํจ.
๋ณดํต์ <div></div>ํ๊ทธ๋ก ๊ฐ์
JSX ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ ์ฌ์ฉํ๊ธฐ
JSX ๋ด๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ฅผ ๋ณด์ฌ์ค์ผ ํ ๋์๋ { } ์ผ๋ก ๊ฐ์ธ์ ๋ณด์ฌ์ค
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ return๋ฌธ ์๋ { } ์์์ ์ฌ์ฉ ๊ฐ๋ฅ
์กฐ๊ฑด๋ฌธ ์ฌ์ฉ๋ฐฉ๋ฒ
1) ์กฐ๊ฑด์ด ํ๋์ผ ๋ - {} ์์ && ์ฐ์ฐ์ ์ฌ์ฉ
2) ์กฐ๊ฑด์ด ๋๊ฐ์ผ ๋ - {} ์์ ์ผํญ์ฐ์ฌ์ (์กฐ๊ฑด ? ์คํ๋ฌธ 1 : ์คํ๋ฌธ 2)
3) ์กฐ๊ฑด์ด 3๊ฐ ์ด์์ผ ๋ - ์กฐ๊ฑด๋ฌธ์ ํํ์์ด ์๋ return๋ฌธ ์์ชฝ์์ ์ฌ์ฉ
style๊ณผ ClassName
์ธ๋ผ์ธ ์คํ์ผ์ ๊ฐ์ฒด ํํ๋ก ์์ฑํด์ผ ํ๋ฉฐ background-color ์ฒ๋ผ -๋ก ๊ตฌ๋ถ๋์ด ์๋ ์ด๋ฆ๋ค์ backgroundColor ์ฒ๋ผ camelCase ํํ๋ก ๋ค์ด๋ฐํด์ค์ผ ํจ
๋ํ, CSS Class๋ฅผ ์ค์ ํ ๋๋ class= ์ด ์๋ className= ์ผ๋ก ์ค์
์ฃผ์ ์ฌ์ฉ : {/* */}
function APP() { const name = 'react' const style = { backgroundColor : 'black', color : 'aqua', fontSize : 24, padding : '1rem' } return ( {*/ ์ฃผ์์ ํ๋ฉด์ ๋ณด์ด์ง ์์ต๋๋ค */} <div className='container'> <div style={style}>{name}</div> </div> ); }โ
์๋ฆฌ๋จผํธ(Element)
์๋ฆฌ๋จผํธ๋ React ์ฑ์ ๊ฐ์ฅ ์์ ๋จ์
์๋ฆฌ๋จผํธ๋ ํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ๊ธฐ์
์ปดํฌ๋ํธ(Component)
ํ๋ฉด์์ UI ์์๋ฅผ ๊ตฌ๋ถํ ๋ ์ฌ์ฉํ๋ ๋จ์
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์์ ์ ์ฌ
"props"๋ผ๊ณ ํ๋ ์์์ ์ ๋ ฅ์ ๋ฐ์ ํ, ํ๋ฉด์ ์ด๋ป๊ฒ ํ์๋๋์ง๋ฅผ ๊ธฐ์ ํ๋ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐ์
์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ๊ผญ ๋๋ฌธ์๋ก ์์! (์๋ฌธ์๋ก ์์ํ๋ HTML ํ๊ทธ์ ๊ตฌ๋ถํ๊ธฐ ์ํด)
import์ export default ์์ ์ด ํ์
3. ๋ฆฌ์กํธ ๋๋ ํ ๋ฆฌ ๊ธฐ๋ณธ๊ตฌ์กฐ
๋ฆฌ์กํธ์ html(index.html)์ ํ๋ >> SPA(Single Page Application)
App.js ์์์ ๋ด์ฉ (JSX) ๋ณ๊ฒฝ
3-1. ๋ฆฌ์กํธ ํด๋๊ตฌ์ฑ
node_modules : ํ์ํ ์ฅ์น๋ค, ํ์ฌ ํ๋ก์ ํธ์ ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ค์น๋์ด ์๋ ํด๋
public : index.html๊ณผ ๊ฐ์ ์ ์ ์ธ ํ์ผ (์ด๋ฏธ์ง, html, json, text ๋ฑ)
src : js, css ๋ฑ ๋์ ์ผ๋ก ๋์ํ๊ธฐ ์ํด ํ์ํ ํ์ผ๋ค๋ก ๋ฆฌ์กํธ ๋ด๋ถ์์ ์์ฑํ๋ ๊ฑฐ์ ๋ชจ๋ ํ์ผ๋ค. ์ด ํ์ผ๋ค์ ๋ช ๋ น์ด์ ๋ฐ๋ผ JS๋ก ์ปดํ์ผ์ด ์งํ๋จ
.gitignore : ๊น์ ํฌํจํ๊ณ ์ถ์ง ์์ ํ์ผ์ ์ด๋ฆ ํน์ ํด๋ ๋ฑ์ ์ ๋ ฅ
package.json : ํ๋ก์ ํธ์ ๊ด๋ จ๋ ๊ธฐ๋ณธ ๋ด์ฉ(ํ๋ก์ ํธ์ ์ด๋ฆ, ๋ฒ์ ๋ฑ)๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก ํฌํจ. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋ node_moduls ๋์ package. json์ ๊น์ ํฌํจํ์ฌ ์ฌ๋ฆฌ๊ฒ ๋๋ฉฐ ํ์ ๋๊ตฐ๊ฐ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ๋ ์ด package.json์ ์ ํ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉ๋ก์ ๊ธฐ์ค์ผ๋ก npm์์ ์ค์น
README.md : ๋ณดํต ๊น๊ณผ ๊ฐ์ ์ ์ฅ์์ ์ฌ๋ฆด ๋ ํ๋ก์ ํธ์ ๋ํ ์ค๋ช ์ ์์ฑํ๋๊ณณ์ผ๋ก ํด๋น ์ ์ฅ์์ ์ง์ ํ๋ฉด ๊ฐ์ฅ ๋จผ์ ๋์ด์ง
4. React ์ฃผ์ ์์ฑ
4-1. Props (Property)
์์ ์ปดํฌ๋ํธ๊ฐ ํ์ ์ปดํฌ๋ํธ์๊ฒ ๊ฐ์ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ์์ฑ
์์ ์ปดํฌ๋ํธ์์ ๊ฐ์ ์ ๋ ฅํ๊ณ , ํ์ ์ปดํฌ๋ํธ์์ ๊ฐ์ ์ฝ์ด์ด
1) ์์ ์ปดํฌ๋ํธ์์ Props๋ฅผ ์ง์
<ComponentName propsName="value" />
2) ํ์ ์ปดํฌ๋ํธ์์ ๋ฐ์ Props ๊ฐ์ ๋ ๋๋ง
function ComponentName(props){
return(<div>{props.propsName}</div>)}
ํน์
function ComponentName({propsName}){
return(<div>{propsName}</div>)}
4-2. State
์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ
๋ฆฌ์กํธ์์ ์ด๋ฒคํธ์ ์ํด ๋ณ๊ฒฝ๋๋ ๋์ ์ธ ๊ฐ
๊ฐ์ด ๋ณํ๋ฉด ํ๋ฉด์ด ๋ ๋๋ง ๋๋ ๊ฒ์ด ํน์ง >> ๋ณ์์ ๋ค๋ฅธ์ ! State๋ฅผ ์ฐ๋ ์ด์
1) useState ์ ์ธ
const [state, setState] = useState(์ด๊ธฐ๊ฐ)
state : ๋ณ์๋ช
setState : state๋ฅผ ๋ณ๊ฒฝ์์ผ์ฃผ๋ ํจ์
useState import ํ์
2) setState(๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ด์ฉ) ์ฌ์ฉ
5. React ์ฃผ์ ํจ์
5-1. map ํจ์
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ๋ด์ฅ๊ฐ์ฒด ์ค ํ๋๋ก ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์ ๊ฐ๊ฐ์ ๋ํ์ฌ ์ฃผ์ด์ง ํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํ. ์ฆ, ์ฃผ์ด์งํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ฆ.
๋จ, ๊ธฐ์กด ๋ฐฐ์ด์ ์ํฅ์ ๋ฐ์ง ์์
key ๊ฐ์ ๊ผญ ์ ๋ ฅํด์ผ ํจ. ์ด๋ key ๊ฐ์ ๊ณ ์ ์ ๊ฐ์ด์ด์ผ ํจ (์ค๋ณต๋๋ฉด ์๋จ)
let ๊ธฐ์กดํจ์ = [
{key1 : value1-1, key2 : value2-1},
{key1 : value1-2 key2 : value2-1},
{key1 : value1-3 key2 : value2-1}
]
๊ธฐ์กดํจ์๋ช .map((item)=>{
<tag key="">{item.keyName}</tag>
})
5-2. filter ํจ์
let ํจ์๋ช = ๊ธฐ์กดํจ์๋ช .filter((item)=>{item.keyName="์ํ๋๊ฐ"})
'full stack > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useRef (2023.05.24) (0) | 2023.05.24 |
---|---|
[React] To-do List ๋ง๋ค๊ธฐ (2023.05.23) (0) | 2023.05.24 |
[React] context API (2023.05.22) (0) | 2023.05.22 |
[React] Component, Props, State (2023.05.16) (0) | 2023.05.16 |
[React] React ๊ฐ์ ๋ฐ ์ค์น, JSX ๋ฌธ๋ฒ (2023.05.15) (1) | 2023.05.16 |