Reactλ₯Ό λ§λ μ΄μ : μ§μμ μΌλ‘ λ°μ΄ν°κ° λ³ννλ λκ·λͺ¨ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄
νμ΄μ€λΆ π©π»βπ» μμ΄λμ΄ : 'μ΄λ€ λ°μ΄ν°κ° λ³ν λλ§λ€ μ΄λ ν λ³νλ₯Ό μ€μ§ κ³ λ―Όνλ κ²μ΄ μλλΌ κ·Έλ₯ κΈ°μ‘΄ λ·°λ₯Ό λ λ € λ²λ¦¬κ³ μ²μλΆν° μλ‘ λ λλ§μ νμ'
β μ ν리μΌμ΄μ
κ΅¬μ‘°κ° λ§€μ° κ°λ¨νκ³ , μμ±ν΄μΌν μ½λ μλ λ§μ΄ μ€μ΄λ¬
β νμ§λ§, μΉλΈλΌμ°μ μμ μ΄ λ°©μλλ‘ νλ©΄ cpuμ μ μ¨λ ν¬κ² μ¦κ°νκ³ (DOMμ λ리λκΉ), λ©λͺ¨λ¦¬λ λ§μ΄ μ¬μ©ν κ²μ΄κ³ , μ¬μ©μκ° μΈνλ°μ€μ ν
μ€νΈ μ
λ ₯μ κΈ°μ‘΄ λ λλ§ λ κ²μ μ¬λΌμ§κ³ , μλ‘ λ λλ§νλ©΄ λκΉ νμμ΄ λ°μν κ²μ΄λ€, κ·Έλμ
β μ΅λν μ±λ₯μ μλΌκ³ νΈμν μ¬μ©μκ²½ν(userExperience)μ μ 곡νλ©΄μ ꡬννκΈ° μν΄ κ°λ°ν κ²μ΄ : React
1. μ»΄ν¬λνΈ : 리μ‘νΈ νλ‘μ νΈμμ νΉμ λΆλΆμ΄ μ΄λ»κ² μκΈΈμ§ μ νλ μ μΈμ²΄
μ»΄ν¬λνΈλ μ¬μ¬μ©μ΄ κ°λ₯ν APIλ‘ μλ§μ κΈ°λ₯λ€μ λ΄μ₯νκ³ μμΌλ©° μ»΄ν¬λνΈ νλμμ ν΄λΉ μ»΄ν¬λνΈμ μκΉμμ μλ λ°©μμ μ μνλ€.
(ν
νλ¦Ώ : λ€λ₯Έ νλ μμν¬μμ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ€λ£° λ μ¬μ©νλ κ², λ³΄ν΅ λ°μ΄ν°μ
μ΄ μ£Όμ΄μ§λ©΄ HTML νκ·Έ νμμ λ¬Έμμ΄λ‘ λ°ννλ€.)
2. λ λλ§ : μ¬μ©μνλ©΄μ λ·°λ₯Ό 보μ¬μ£Όλ κ²
리μ‘νΈλΌμ΄λΈλ¬λ¦¬λ λ·°λ₯Ό λ λλ§ ν λ : λ°μ΄ν°κ° λ³ν λλ§λ€ μλ‘κ² λ¦¬λ λλ§νλ©΄μ μ±λ₯μ μλΌκ³ , μ΅μ μ μ¬μ©μ κ²½νμ μ 곡νλ€, μ΄ μ΄μ λ₯Ό νμ
νλ €λ©΄,
β (1)리μ‘νΈ μ»΄ν¬λνΈκ° μ΅μ΄λ‘ μ€νν 'μ΄κΈ°λ λλ§',
β (2)μ»΄ν¬λνΈμ λ°μ΄ν°λ³κ²½μΌλ‘ λ€μ μ€νλλ '리λ λλ§'κ°λ
μ μ΄ν΄ν΄μΌνλ€.
render
ν¨μκ° μλ€.μ΄λ, render()ν¨μλ₯Ό μ€ννλ©΄ : κ·Έ λ΄λΆμ μλ μ»΄ν¬λνΈλ€λ μ¬κ·μ (μ΄λ€ μ¬κ±΄μ΄ μκΈ°μμ μ ν¬ν¨νκ³ λ€μ μκΈ°μμ μ μ¬μ©νμ¬ μ μλ λλ₯Ό λ§ν¨. μ¦,무μΈκ°λ₯Ό μ€λͺ ν λ μκΈ°μμ μ ν¬ν¨νλ κ²μ λ§νλ€. recursive)μΌλ‘ λ λλ§νλ€.
μ΄λ κ² μ΅μμ μ»΄ν¬λνΈμ λ λλ§ μμ λλλ©΄ κ°κ³ μλ μ 보λ€μ μ¬μ©ν΄μ HTML markupμ λ§λ€κ³ , μ΄λ₯Ό μ°λ¦¬κ° μ νλ μ€μ νμ΄μ§μ DOMμμ μμ μ£Όμ νλ€.
- μ»΄ν¬λνΈλ₯Ό μ€μ νμ΄μ§μ λ λλ§ νλ κ²?
- (1) λ¬Έμμ΄ ννμ HTMLμ½λλ₯Ό μμ±νλ€
- (2) νΉμ DOMμ ν΄λΉ λ΄μ©μ μ£Όμ νλ©΄ μ΄λ²€νΈκ° μ μ© λλ€.
μ΄λ κ² : λ λλ§ β HTMLλ§ν¬μ
<div>...</div>
--(μ£Όμ )β DOM β μ€μ νμ΄μ§
μ‘°νκ³Όμ
(reconciliation)μ κ±°μΉλ€μ΅μνμ μ°μ°
μΌλ‘ λΉκ΅ν ν, λμ μ°¨μ΄λ₯Ό μμλ΄ μ΅μνμ μ°μ°μΌλ‘
DOMνΈλ¦¬λ₯Ό μ
λ°μ΄νΈνλ κ².μ΅μ μ μμμ νμ©νμ¬
μ΄λ₯Ό μννλ κ².Virtual DOMμ μ¬μ©νλ κ²
const App = () => {
const name = 'λ¦μ‘νΈ';
return (
<div>
{name === '리μ‘νΈ' ? <h1>리μ‘νΈμ
λλ€</h1> : null}
//μμ λμΌνκ³ λ 짧μ μ½λ
{name === '리μ‘νΈ' && <h1>리μ‘νΈμ
λλ€</h1>}
</div>
)
}
export default App;
* 리μ‘νΈμμ falseλ₯Ό λ λλ§ν λλ nullμ²λΌ μ무κ²λ λνλμ§ μλλ€.
// μ΄ μ½λλ μ€λ₯λΈ App(...): Nothing was returned from render. this usually means a return
//statement is missing. Or, to render nothing, return null.
import React from 'react';
const App = () => {
const name = undefined;
return (
name;
)
}
export default App;
// μ΄λ€ κ°μ΄ undefinedμΌμλ μλ€λ©΄ ORμ°μ°μ μ¬μ©ν΄μ κ°λ¨ν μ€λ₯λ°©μ§ γ±γ±
// νμ§λ§, JSXλ΄λΆμμ undefinedλ₯Ό λ λλ§νλ κ²μ μ€λ₯μλ¨
const name = undefined;
return (
<div>
{name}
</div>
)
* 리μ‘νΈμμ λμμμ μ€νμΌ μ μ©ν λλ λ¬Έμμ΄ννλ‘ λ£λκ² μλλΌ κ°μ²΄ννλ‘ λ£μ΄μ£Όμ΄μΌ νλ€.
- μΉ΄λ©νκΈ°λ² : background-color(X) backgroundColor(O)
const App = () => {
const name = 'react';
const styleBabe = {
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px',
fontWeight: 'bold',
padding: 16
}
return (
<div style={styleBabe}>
{name}
</div>
)
}
λλ,
<div
style={{
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px',
fontWeight: 'bold',
padding: 16
}}
>
* JSXμμλ, class λμ className
/** */