1.JSX
JSX(JavaScript XML)λ Javascriptμ XMLμ μΆκ°ν νμ₯ν λ¬Έλ²μ΄λ€.
JSX μμ΄ React λ§λ€κΈ°
main.ts
App.ts
components/Greeting.ts
Reactμμ JSXλ₯Ό μ¬μ©νλ λͺ©μ
κ·Όλ³Έμ μΌλ‘, JSX
λ React.createElement(component, props, ...children)
ν¨μμ λν λ¬Έλ²μ μ€νμ μ 곡ν λΏμ΄λ€.
λ μμλ λμΌν κ²°κ³Όκ°μ λνλ΄μ€λ€.
νμ§λ§ React.createElement
λ‘ μμ±νμμ λ λ³΄λ€ JSX
λ₯Ό μ¬μ©νλ κ²μ΄ ν¨μ¬ μ§κ΄μ μ΄κ³ κ°λ
μ±μ΄ μ’κ³ JSX
λ νλμ νμΌμ μλ°μ€ν¬λ¦½νΈμ HTMLμ λμμ μμ± ν μ μλ μ μ΄ μ₯μ μ΄λ€.
Syntactic sugar
μ§κ΄μ μ΄μ§λ μμ§λ§ μ½λμ μμ μ€μΌ μ μλ λ¬Έλ²μ μΈ μ€νμ μλ―Ένλ€.
λνμ μΈ Syntactic sugar
1. Ternary Operator(μΌν μ°μ°μ)
2. Object Spread / Array Spread (κ°μ²΄ μ κ° / λ°°μ΄ μ κ°)
3. Object Destructuring / Array Destructuring (κ°μ²΄ ꡬ쑰 λΆν΄ ν λΉ / λ°°μ΄ κ΅¬μ‘° λΆν΄ ν λΉ)
4. Object Rest / Array Rest (κ°μ²΄ λλ¨Έμ§ μ°μ°μ, λ°°μ΄ λλ¨Έμ§ μ°μ°μ)
5. Nullish coalescing (null λ³ν© μ°μ°μ)
κΈ°μ‘΄ λ¬Έλ²μ κ²½μ° μ‘΄μ¬νμ§ μκ±°λ null, undefined, 0 λλ λΉ λ¬Έμμ΄κ³Ό κ°μ μλͺ»λ κ°μ΄ μλ κ²½μ° κΈ°λ³Έκ° 'Guest'κ° name λ³μμ ν λΉλλ€.
κ·Έλ¬λ μ΄λ¬ν κΈ°μ‘΄ λ¬Έλ²μ μ κ·Ό λ°©μμ name μμ±μ΄ μ‘΄μ¬νμ§λ§ μλͺ»λ κ°μ κ°μ§κ³ μμ΄λ κΈ°λ³Έκ°μ ν λΉνλ€λ λ¨μ μ΄ μλ€.
null λ³ν© μ°μ°μ(??)λ νΉλ³ν null λλ undefined κ°λ§ νμΈνλ κΈ°μ‘΄ ꡬ문μ λμμ΄λ€. κ°μ΄ null λλ undefinedμΈ κ²½μ°μλ§ κΈ°λ³Έκ°μ ν λΉνκ³ κ°μ΄ falsyμΈ κ²½μ°μλ ν λΉνμ§ μλλ€.
5. Arrow function (νμ΄ν ν¨μ)
νμ΄ν ν¨μλ function ν€μλλ₯Ό μ¬μ©νλ λμ νμ΄ν(=>)λ₯Ό μ¬μ©νμ¬ ν¨μλ₯Ό κ°κ²°νκ² μ μν μ μλ€.
6. Template literals(ν
νλ¦Ώ 리ν°λ΄)
ν νλ¦Ώ 리ν°λ΄μ μ¬μ©νλ©΄ μμλ°μ΄νλ ν°λ°μ΄ν λμ λ°±ν±(`)μ μ¬μ©νμ¬ λ¬Έμμ΄μ μ μν μ μλ€. μ΄λ κ² νλ©΄ λ¬Έμμ΄ μμ λ³μμ ννμμ λ μ½κ² ν¬ν¨ν μ μλ€.
7. Optional chaining(μ νμ μ°κ²°)
Optional chaining
μ μ¬μ©νλ©΄ κ°μ²΄μ μ‘΄μ¬ μ¬λΆμ λν κ±±μ μμ΄ κ°μ²΄μ μμ±μ μ‘μΈμ€ν μ μλ€. μμ±μ΄ μ μλμ§ μμ κ²½μ° μ€λ₯λ₯Ό λ°μμν€λ λμ κ²°κ³Όκ° μ μλμ§ μλ€
μμ λ΄μ© λ§κ³ λ°°μ΄ λ§€μλ
λ λνμ μΈ λ¬Έλ²μ μΈ μ€νμ ν¬ν¨λλ€.
React.createElement
React.createElement
λ React
μμ κ°μ₯ κΈ°λ³Έμ μΈ μ»΄ν¬λνΈ μμ± λ°©λ² μ€ νλμ΄λ€. μ΄ ν¨μλ₯Ό μ¬μ©νμ¬ React μμλ₯Ό μμ±νκ³ μ΄λ₯Ό λ λλ§ν μ μλ€.
React.createElement
ν¨μλ μΈ κ°μ μΈμκ° νμνλ€.
μμμ μ ν (λ¬Έμμ΄ λλ μ»΄ν¬λνΈ ν¨μ)
μμμ μμ± (λλ "props") λλ null
μμ μμλ€
μ μ½λλ μλμ κ°μ React μμλ₯Ό λ§λ€μ΄λΈλ€.
React.createElement
ν¨μλ μ»΄ν¬λνΈ ν¨μλ₯Ό 첫 λ²μ§Έ μΈμλ‘ μ¬μ©ν μλ μλ€. μ΄ κ²½μ° ν¨μ μ΄λ¦μ λ¬Έμμ΄λ‘ μ λ¬νκ±°λ ES6μ νμ΄ν ν¨μ ꡬ문μ μ¬μ©νμ¬ μ§μ ν¨μλ₯Ό μ λ¬ν μ μλ€. λν μμ± λ° μμ μμλ€μ μ»΄ν¬λνΈ ν¨μμ μΈμλ‘ μ λ¬λλ€.
React Element
React Element
μ μμ±(property)
type: μμμ μ ν, μλ₯Ό λ€μ΄ "div" λλ μ¬μ©μ μ§μ μ»΄ν¬λνΈ ν¨μμ΄λ€.
props: μμμ μμ±, μλ₯Ό λ€μ΄ className, style, onClick λ±μ μμ±μ΄ ν¬ν¨λλ€.
key: μ»΄ν¬λνΈκ° μ λ°μ΄νΈλ λ Reactκ° μμλ₯Ό μλ³νλ λ° μ¬μ©λλ κ³ μ ν μλ³μμ΄λ€.
ref: React μμμ λν μ°Έμ‘°(reference)λ₯Ό λ§λλ λ° μ¬μ©λλ€.
React Element
λ React
μμ λ λλ§λλ κ°μ₯ μμ λ¨μμ΄κ³ , JavaScript
κ°μ²΄λ‘, React
μμλ₯Ό λνλΈλ€. React
μμλ νλ©΄μ λ λλ§λλ μμλ₯Ό λνλ΄λ©°, λ€λ₯Έ React
μμλ€κ³Ό κ²°ν©νμ¬ React
μ»΄ν¬λνΈλ₯Ό λ§λλ λ° μ¬μ©λλ€.
React Element
λ λΆλ³κ°μ²΄(immutable object)μ΄λ©°, ν λ² μμ±λλ©΄ μμ λ μ μλ€. μ΄λ¬ν λΆλ³μ±μ React
μ μ±λ₯μ ν₯μμν€λ λ° κΈ°μ¬νλλ° React
λ λ³νκ° νμν κ²½μ° μλ‘μ΄ React Element
λ₯Ό λ§λ€κ³ κΈ°μ‘΄μ Element
μ μ Element
λ₯Ό λΉκ΅νμ¬ μ΅μνμ λ³κ²½λ§ μ μ©νλ―λ‘ λ λλ§ μ±λ₯μ ν₯μμν¨λ€.
React StrictMode
μ ν리μΌμ΄μ μμ μ μ¬μ μΈ λ¬Έμ λ₯Ό 미리 κ°μ§νκ³ ν΄κ²°ν μ μλλ‘ λμμ£Όλ λꡬ StrictModeλ κ°λ° λͺ¨λμμλ§ λμνλ©°, λΈλΌμ°μ μμλ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€.
StrictModeλ₯Ό ν΅ν΄μ μ»μ μ μλ ν¨κ³Ό
λΆμν¨κ³Ό κ²μ¬
: React μ»΄ν¬λνΈμμ λΆμν¨κ³Ό(μΌλ°μ μΌλ‘ μλͺ μ£ΌκΈ° λ©μλ, useEffect λ±)λ₯Ό μ¬μ©ν λ κ²½κ³ λ©μμ§λ₯Ό μΆλ ₯νμ¬ μ μ¬μ μΈ λ¬Έμ λ₯Ό κ°μ§ν μ μλ€.λ κ±°μ λ¬Έμμ΄ ref κ²½κ³
: λ¬Έμμ΄μ μ¬μ©νμ¬ refλ₯Ό μμ±νλ©΄ κ²½κ³ λ©μμ§κ° νμλλ€. λ¬Έμμ΄ refλ λ μ΄μ κΆμ₯λμ§ μμΌλ©°, ν¨μλ₯Ό μ¬μ©νμ¬ refλ₯Ό μμ±νλ κ²μ΄ μ’λ€.λ κ±°μ μλͺ μ£ΌκΈ° λ©μλ κ²½κ³
: λ κ±°μ μλͺ μ£ΌκΈ° λ©μλ(componentWillMount, componentWillReceiveProps, componentWillUpdate)λ₯Ό μ¬μ©νλ©΄ κ²½κ³ λ©μμ§κ° νμλλ€. μ΄λ¬ν λ©μλλ λ μ΄μ κΆμ₯λμ§ μμΌλ©°, λμ μ componentDidMount, componentDidUpdate, getDerivedStateFromProps λ° getSnapshotBeforeUpdate λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.μμ νμ§ μμ μλͺ μ£ΌκΈ° λ©μλ κ²½κ³
: μμ νμ§ μμ μλͺ μ£ΌκΈ° λ©μλ(UNSAFE_componentWillMount, UNSAFE_componentWillReceiveProps, UNSAFE_componentWillUpdate)λ₯Ό μ¬μ©νλ©΄ κ²½κ³ λ©μμ§κ° νμλλ€. μ΄λ¬ν λ©μλλ ν₯νReact
μ λ°μ΄νΈμμ μμ λ μμ μ΄λ©°, λμ μ getDerivedStateFromProps λ° getSnapshotBeforeUpdate λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
StrictModeλ₯Ό μ¬μ©νλ©΄ μ ν리μΌμ΄μ
μμ λ°μν μ μλ μ μ¬μ μΈ λ¬Έμ λ₯Ό μ‘°κΈ°μ κ°μ§ν μ μμΌλ―λ‘, React
μ ν리μΌμ΄μ
μ κ°λ° λ° μ μ§λ³΄μλ₯Ό λ³΄λ€ μμ νκ² μνν μ μλ€.
VDOM(Virtual DOM)μ΄λ?
Virtual DOM
(κ°μ DOM)μ React
μ ν΅μ¬ κ°λ
μ€ νλμ΄λ€. Virtual DOM
μ λΈλΌμ°μ κ° μ§μ μ‘°μνλ μ€μ DOM
κ³Όλ λ³λλ‘, JavaScript κ°μ²΄λ‘ μ΄λ£¨μ΄μ§ κ°μ²΄ λͺ¨λΈμ΄λ€.
React
μμ μ»΄ν¬λνΈκ° μ
λ°μ΄νΈλ λ, μ€μ DOM
μ μ‘°μνλ κ²μ΄ μλλΌ, Virtual DOM
μ μ
λ°μ΄νΈνκ³ , μ΄μ κ³Ό μλ‘μ΄ Virtual DOM
μ λΉκ΅νμ¬ λ³κ²½λ λΆλΆλ§ μ€μ DOM
μ μ μ©νλ€. μ΄λ₯Ό ν΅ν΄ DOM
μ‘°μ νμλ₯Ό μ΅μννκ³ , λΉ λ₯Έ λ λλ§μ ꡬνν μ μλ€.
React
μμλ μ΄λ¬ν Virtual DOM
μ ꡬννκ³ , κ° μ»΄ν¬λνΈμ μνμ μμ±μ΄ λ³κ²½λ λλ§λ€ Virtual DOM
μ μ
λ°μ΄νΈνκ³ , λ³κ²½λ λΆλΆλ§ μ΅μ νλ λ°©μμΌλ‘ μ€μ DOM
μ μ μ©νμ¬ UIλ₯Ό μ
λ°μ΄νΈνλ€.
DOMμ΄λ?
DOM
(Document Object Model)μ λΈλΌμ°μ μμ μΉ νμ΄μ§μ HTML λ¬Έμλ₯Ό λ‘λνκ³ νμ±ν κ²°κ³Όλ¬Όμ λνλ΄λ κ°μ²΄ λͺ¨λΈμ΄λ€. μ¦, HTML, XML λλ XHTML λ¬Έμλ₯Ό λΈλΌμ°μ κ° μ΄ν΄ν μ μλ κ°μ²΄ λͺ¨λΈλ‘ λ³ννμ¬(HTML λ¬Έμλ₯Ό μ΄λ£¨λ λͺ¨λ μμλ€μ κ°μ²΄λ‘ ννλλ©°, μ΄λ¬ν κ°μ²΄λ€μ μλ‘ κ³μΈ΅μ μΈ κ΄κ³λ₯Ό κ°μ§κ³ μλ€.), μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ λ¬Έμμ ꡬ쑰, μ€νμΌ, μ½ν
μΈ λ±μ λμ μΌλ‘ μ‘°μν μ μκ² νλ€.
DOMκ³Ό Virtual DOMμ μ°¨μ΄
DOM
μ λΈλΌμ°μ μμ μ§μ μ‘°μλλ μ€μ κ°μ²΄μ΄λ―λ‘, DOM
μ‘°μ μμ
μ λΈλΌμ°μ μ μ±λ₯μ ν¬κ² μ νμν¬ μ μλ€.
λ°λ©΄, Virtual DOM
μ React
μμ λ΄λΆμ μΌλ‘ κ΄λ¦¬λλ κ²μΌλ‘, λΈλΌμ°μ κ° μ§μ μ‘°μνμ§ μμΌλ―λ‘ DOM μ‘°μ μμ
μ λΉμ©μ ν¬κ² μ κ°ν μ μλ€.
Reconciliation(μ¬μ‘°μ ) κ³Όμ μ 무μμΈκ°?
React
μμ Reconciliation(μ¬μ‘°μ )
μ Virtual DOM
μμ μ΄λ£¨μ΄μ§λ κ³Όμ μΌλ‘, μ΄μ μνμ νμ¬ μνμ Virtual DOM
μ λΉκ΅νμ¬ λ³κ²½λ λΆλΆλ§ μ€μ DOM
μ μ
λ°μ΄νΈνλ κ³Όμ μ΄λ€.
Reconciliation
μ Virtual DOM
μ λ
Έλλ₯Ό μννλ©° μ΄μ μνμ λΉκ΅νμ¬ λ³κ²½λ λΆλΆμ μ°Ύλλ€. μ΄ κ³Όμ μμ React
λ ν¨μ¨μ μΌλ‘ λΉκ΅λ₯Ό μννκΈ° μν΄ λ€μν μ΅μ ν κΈ°μ μ μ¬μ©νλ€. μλ₯Ό λ€μ΄, κ°μ μ»΄ν¬λνΈκ° μ¬λ¬ λ² λ λλ§λ λ, React
λ μ΄μ λ λλ§ κ²°κ³Όμ νμ¬ λ λλ§ κ²°κ³Όλ₯Ό λΉκ΅νμ¬ λ³κ²½λ λΆλΆλ§ μ
λ°μ΄νΈνλ€.
Reconciliation
μ μ΄μ μ μ±λ₯κ³Ό μ¬μ©μ κ²½ν κ°μ μ΄λ€. React
λ Virtual DOM
μ μ¬μ©νμ¬ λ³κ²½λ λΆλΆλ§ λ λλ§νλ―λ‘, νμν μ΅μνμ DOM
μ‘°μλ§ μνλμ΄ μ±λ₯μ΄ ν₯μλκ³ , λ³κ²½λ λΆλΆλ§ μ
λ°μ΄νΈλλ―λ‘, λΆνμν νλ©΄ κΉλΉ‘μμ λ°©μ§νκ³ μ¬μ©μ κ²½νμ κ°μ ν μ μλ€.
Aha Moment
μ κ° κ΅¬λ¬Έμ λν΄μ MDNμ νμΈνμ λ μλμ κ°μ λ΄μ©μ μΆκ°λ‘ νμΈ ν μ μμλ€.
apply()
λ체
μΌλ°μ μΌλ‘ λ°°μ΄μ μ리먼νΈλ₯Ό ν¨μμ μΈμλ‘ μ¬μ©νκ³ μ ν λ Function.prototype.apply()
λ₯Ό μ¬μ©νμλ€.
λ°°μ΄ λ³΅μ¬
λ°°μ΄ λ³ν©
λ°°μ΄ λ³ν© λ° μμλ³κ²½
μ°Έκ³ : unshift()μ λ¬λ¦¬, μ κ° κ΅¬λ¬Έμ μ¬μ©μμλ μλ‘μ΄ arr1μ λ§λ€λ©° κΈ°μ‘΄ λ°°μ΄μ λ³ννμ§ μλ€.
μ κ° κ΅¬λ¬Έμ΄ μΆκ°λκ³ λμ λ°μ΄ν°μ λΆλ³μ±μ μ μ§νκΈ° λ μ©μ΄ν΄μ§ κ² κ°λ€κ³ μκ°μ΄ λ€μλ€. μΆκ°λ‘ μ κ° κ΅¬λ¬Έμ΄ μ΄λμμ νμλμ΄μ Έ μλμ§ μ μ μλ μκ°μ΄μλ€.
μ΄λ²μ λ°λΈλ
ΈνΈ ν€μλλ₯Ό κ²μν΄λ³΄λ©΄μ λλ λΆλΆμ React
κ° μ΄λ€ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄μ JSX
λ₯Ό λμ
νκ³ VDOM
μ λμ
νκ² λμλμ§ μκ°ν΄λ³΄λ κ³κΈ°κ° λμλ κ² κ°λ€. νμ¬ μ€λ¬΄μμ μμ
νλ©΄μλ μ΄ κΈ°μ μ΄ μ λμ€κ² λμλμ§μ λν΄μ κΉκ² κ³ λ―Ό ν΄λ³Έμ μ΄ μκ³ λλ΅μ μΈ λΆλΆμ λν΄μλ§ μκ³ μμλ€λ©΄ μ΄λ²μ React
μ λν μ λ°μ μΈ λ΄μ©μ μ°Ύμλ³΄κ³ μ 리νλ©΄μ React
μ μ λ³΄λ€ λ κ°κΉμμ§ λλμ΄ λ€μλ€. μ΄λ²μ μ 리ν λ
ΈνΈλ₯Ό κΈ°λ°μΌλ‘ μ§μμ μΌλ‘ λ¨Έλ¦Ώμμ μ§μ΄ λ£λ κ³Όμ μ ν΅ν΄μ κΈ°λ³Έμ μ κΈ°μ΅νλλ‘ ν΄μΌκ² λ€.
Reference
Last updated