Reactλ‘ κ°λ°μ νλ€λ³΄λ©΄ νμ λ§λ₯λ¨λ¦¬λ λ¬Έμ κ° νλμλ€. λ°λ‘ renderingμ κ΄νκ²μ΄λ€.
νΉν λΆνμν renderingμ μ€μ΄λκ²μ react κ°λ°μκ° νμ κ°μ Έκ°μΌν κ³Όμ μΌ κ²μ΄λ€. 본격μ μΌλ‘ rendering μ΅μ νμ λν΄ μ΄μΌκΈ°νκΈ° μ μ renderingμ λν΄ κ°λ¨ν μμ보λλ‘ νμ.
Rendering in REACT
Reactμμ λ§νλ renderingμ propsμ stateμ μνλ₯Ό κΈ°λ°μΌλ‘ componentλ₯Ό ꡬμ±νλ μμ
μ λ§νλ€. Renderingμ΄ μ΄λ£¨μ΄μ§λ κ³Όμ μ λ€μκ³Ό κ°λ€.
Mountκ° μ΄λ£¨μ΄μ§λ κ³Όμ
function componentνΈμΆ- ꡬνλΆλΆ μ€ν
PropsνμΈ,hookμ€ν,variablesλ°functionμμ±
hookμ λ±λ‘ν΄λ μνκ°,effectλ±μ λ³λ λ©λͺ¨λ¦¬μ μ μ₯λμ΄ κ΄λ¦¬ returnμ€ν (renderingμμ)renderμ€ν (κ°μ₯DOMμμ±)commitλ¨κ³ (μ€μ DOMμ λ°μ)useLayoutEffect
λΈλΌμ°μ κ°paintνκΈ°μ μuseLayoutEffectμ λ±λ‘ν΄λeffectκ° λκΈ°λ‘ μ€ν
μ΄λstate,storeλ±μ λ³κ²½μ΄ μλ€λ©΄re-renderingλλ€PaintuseEffect
mountλμ΄ νλ©΄μ΄ κ·Έλ €μ§ μ§ν,useEffectμ λ±λ‘ν΄λeffectκ° λΉλκΈ°λ‘ μ€ν
Rerendering in REACT
function componentμ¬νΈμΆ- ꡬνλΆ μ€ν
returnμ€νrenderμ€ν
μλ‘μ΄ κ°μDOMμμ± ν μ΄μ κ³Ό λΉκ΅νμ¬ λ¬λΌμ§ λΆλΆμ νμνκ³ , μ€μ λ³κ²½μ λ°μν λΆλΆμ κ²°μ νλ€commitλ¨κ³μμ λ¬λΌμ§ λΆλΆλ§ μ€μ DOMμ λ°μνλ€useLayoutEffect
useLayoutEffectμ λ±λ‘λeffectκ° λκΈ°λ‘ μ€ν
μ΄λ,state,redux-storeλ±μ λ³κ²½μ΄ μλ€λ©΄ νλ² λ re-rendering λλ€PaintuseEffect
updateλμ΄ νλ©΄μ΄ κ·Έλ €μ§ μ§ν,useEffectμ λ±λ‘ν΄λeffectκ° λΉλκΈ°λ‘ μ€ν
useEffect & useLayoutEffect
useEffectμ λ±λ‘λ effectλ νλ©΄μ΄ κ·Έλ €μ§ μ§ν λΉλκΈ°λ‘ μ€νλλ€
useLayoutEffectμ λ±λ‘λ effectλ DOM λ°μ ν νλ©΄μ΄ κ·Έλ €μ§κΈ° μ§μ λκΈ°λ‘ μ€νλλ€.
rerenderingμ΄ μΌμ΄λλ 쑰건
stateκ° λ³κ²½ λμμ λ
reactμμ μνκ΄λ¦¬λ₯Ό μν΄ μ¬μ©νλstateκ°setStateλΌλ λ©μλλ₯Ό μ΄μ©ν΄ κ°μ΄ λ³κ²½λμμλ μ΄λ₯Ό κ°μ§νκ³rerenderingνλ€- μ λ¬λ°μ
propsκ° λ³κ²½ λμμ λ
λΆλͺ¨componentλ‘λΆν° λ°μpropsκ° λ³κ²½λμμλrerenderingμ νλ€ - λΆλͺ¨
componentκ°renderingλ λ
Component rendering μ΅μ ν κΈ°λ²
Reactμμλ μ΄λ¬ν λλΉλ₯Ό λ§κΈ°μν΄ renderingμ μ΅μ νν μ μλ λͺκ°μ§ μ£Όμν APIλ₯Ό μ 곡ν΄μ£Όκ³ μλ€.
React.memo()
HOC(High-order component)ννλ‘ λ΄μ₯λ λ©μλμ΄λ€. propsκ° λ³κ²½λμλμ§ νμΈνκ³ , λ³κ²½λμ§ μμμ κ²½μ° rerendering λμ§ μλλ‘ νλ€. ν¨μν, classν component λλ€ wrappingν΄μ μ¬μ©ν μ μλ€.
2. React.Component.shouldComponentUpdate
rendering μ΄κΈ°μ νΈμΆλλ μ νμ class component life cycle λ©μλ μ΄λ€. falseλ₯Ό returnνλ©΄ renderingμ νμ§ μλλ€. λ³΄ν΅ μ΄μ props λ° μνκ° λ¬λΌμ‘λμ§ νμΈνκ³ , λ³νκ° μλ€λ©΄ falseλ₯Ό returnνλ€.
3. React.PureComponent
μμμ μΈκΈν props λ° μν λΉκ΅λ shoudComponentUpdateλ₯Ό ꡬννλ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ΄κΈ° λλ¬Έμ, PureComponentλ ν΄λΉ λ‘μ§μ κΈ°λ³Έμ μΌλ‘ ꡬνν΄μ€λ€.
Props refer optimization
function componentμ κ²½μ° reactλ λμΌν μ°Έμ‘°λ₯Ό μ¬μ¬μ© ν μ μλλ‘ μ μ©ν hookμ μ 곡ν΄μ€λ€. κ°μ²΄λ₯Ό λ§λ€κ±°λ 볡μ‘ν μ°μ°μ νλ κ²κ³Ό κ°μ μΌλ°μ μΈ λ°μ΄ν°λ₯Ό μν useMemoμ callback ν¨μλ₯Ό λ§λλλ° μ¬μ©ν μ μλ useCallbackμ΄λ€. νμ§λ§ λͺ¨λ ν¨μλ κ°μ²΄μ λν΄ useMemoμ useCallbackμ μ¬μ©νκ² λ κ²½μ° λ°°λ³΄λ€ λ°°κΌ½μ΄ λ ν° μ±λ₯μ΄μκ° λ°μν μ μλ€. λ³κ²½μ 체ν¬λ₯Ό νλκ² μμ²΄κ° propsλ₯Ό λΉκ΅νλ λΉμ©μ΄ λ°μνκΈ° λλ¬Έμ΄λ€. κ΄λ ¨ λ΄μ©μ μΈκΈν Dan abramovμ νΈμ
React Forget μ λ±μ₯μκ³
리μ‘νΈ νμ΄ ReactConf 2021μμ React Forgetμ΄λΌλ μ€νμ μΈ μ»΄νμΌλ¬λ₯Ό μμ°νλ€. μ΄κ²μ μλμΌλ‘ memoization κΈ°λ₯μ μΆκ°νλλ‘ νλκ². ν₯λ―Έλ‘μ΄ μ μ hookμ μ’
μμ± λ°°μ΄μ memoizationν λΏλ§ μλλΌ JSXμμ λ°νκ°λ memoizationνλ€λ κ²μ΄λ€. λ€μ κ°λ¨ν λ§ν΄μ React Forgetμ΄ μ»΄ν¬λνΈ νΈλ¦¬ μ 체μμ λΆνμν renderingμ ν¨κ³Όμ μΌλ‘ μ κ±°ν μ μλ€λ κ²μ λ»νλ€.
νμ¬ React Forgetμ μΆμλμ§ μμμ§λ§, μμ
μ΄ μ μ§νλκ³ μλ€λ ννΈλ μ‘΄μ¬νλ€. useEventκ° close λμκ³ , λ€λ₯Έ κ³³μμ 'auto memoization μΌλ‘ μΈν΄ rendering λ¬Έμ κ° μ¬λΌμ§λ©΄ μ΄λ¨κΉμ?' λΌκ³ μΈκΈνκΈ°λ νλ€.
κ²°κ΅, κ°λ°μλ€μ΄ λ€μν ν΄κ³Ό λμμ trade-offλ₯Ό λͺ ννκ² μ΄ν΄ν΄μ μμ μ μν©μ κ°μ₯ μ ν©νκ²μ΄ 무μμΈμ§ κ²°μ νκ³ , μ΄μ κΈ°λ°ν΄μ κΈ°μ μ€νμ΄λ μλΉμ€λ₯Ό λ§λ€μ΄λκ°λ κ²μ΄ μ€μνκ²μ΄ μλκΉ.
- https://github.com/donavon/hook-flow
- https://blog.isquaredsoftware.com/2020/05/blogged-answers-a-mostly-complete-guide-to-react-rendering-behavior/