( μ’μμ νλ² κΎΉ λλ¬μ£ΌμΈμ π )
Reactμ μΌκ΄ μ²λ¦¬λ μ¬λ¬ μν μ
λ°μ΄νΈκ° νλμ λ¨μΌ 리λ λλ§μΌλ‘ μ²λ¦¬λ₯Ό ν©λλ€. κ·Έλμ ν ν¨μ μμ μ무리 λ§μ μν μ
λ°μ΄νΈ ( ex. setState...) λ₯Ό νΈμΆν΄λ 리λ λλ§μ λ¨ νλ²λ§ λ°μνμ΅λλ€. (β οΈpromise , callback() , timeout()
μ μΈ!)
μ΄λ κ² ν¨μΌλ‘μ¨ λ¦¬μνΈμμ λΆνμν λ λλ§μ μ€μΌ μ μμ΄μ ν° μ΄μ μ΄μλλ°μ.
μ΄λ² 18 λ²μ μμ λΆν°λ React.createRoot
λ₯Ό μ¬μ©νλ©΄ μ΄μ μ μ μΈ λμλ κΈ°λ₯λ€λ μΌκ΄ μ²λ¦¬κ° κ°λ₯ν΄μ‘μ΅λλ€!!!
π : μλ κ·Όλ° κ·Έκ±Έ μ κ°μ΄ μ²λ¦¬νλλ‘ ν건κ°μ?? λ λλ§ μκ°μ΄ μ¦κ°νλκ±° μλκ°μ?!
π€ : λ¬Όλ‘ μλνμ§ μκ³ νμμμμ΄λ λΉλκΈ° ν¨μλ₯Ό κΈ°λ€λ¦¬λ©΄μ μ²λ¦¬λ₯Ό νλ©΄ μκ°μ΄ λκ² μ§λ§, μλμ κ°μ΄ μ§νμ΄ λλ€λ©΄ λλ²μ 리λ λλ§μ νκ² λ©λλ€.
fetch(...).then(() =>{
setCount(count+1);
setClicked(true);
})
κ·Έλμ μν©μ κ΄κ³μμ΄ μΌκ΄ μ²λ¦¬κ° κ°λ₯ν΄μ§λλ€.
π : κ·Έλ¬λ©΄ μ λ μλμΌλ‘ νκΈ° μ«κ³ λ°λ‘ μ²λ¦¬νκ³ μΆμΌλ©΄ μ΄λ‘νλμ???
π€ : ReactDOM.flushSync()
λ₯Ό μ¬μ©νλ©΄ λ©λλΉ. μ¬μ©νκ² λλ©΄ ν΄λΉ μν μ
λ°μ΄νΈ νΈμΆμ λ°°μΉ λμμμ μ μΈμν¬ μ μμ΅λλ€!
import { flushSync } from 'react-dom'; // Note: react-dom, not react
function handleClick() {
flushSync(() => {
setCounter(c => c + 1);
});
// React has updated the DOM by now
flushSync(() => {
setFlag(f => !f);
});
// React has updated the DOM by now
}
μ΄λ² μ
λ°μ΄νΈμμ κ°μ₯ ν° λ³νλΌκ³ λ§μ μ¬λλ€μ΄ κΌ½μ κΈ°λ₯μ
λλ€ μ€μνλκΉ βοΈβοΈβοΈ!
νΈλμ§μ
μ μ¬μ©ν¨μΌλ‘μ 리μνΈλ " μ΄λ€ μ
λ°μ΄νΈκ° κΈ΄κΈνκ±°λ κ·Έλ μ§ μμμ§ " λ₯Ό μ μ μμ΅λλ€!
μλ₯Ό λ€μ΄ 리μ€νΈ νν°λ§ κ²μ μ λ ₯μ κ²½μ°λ₯Ό μλ₯Ό λ€μ΄λ³΄μ£ .!
λ§μ½ κ²μ μ λ ₯μ μ λ°μ΄νΈ νλ κ²½μ° μ λ ₯ ν λ κ°μ΄ λ³κ²½λμ΄μΌ ν©λλ€. κ·Έλμ μ λ ₯μ toκ° λλλ©΄ ,
μ΄λ κ² λμμΌνμ£ . κ·Έλμ μ λ ₯μ°½μ urgent updates λ‘ νμν μ μμΌλ©°, μλ νλͺ©λ€μ λ³΄μ‘°λ‘ νν°λ§νλ μ ν μ λ°μ΄νΈλ‘ κ΅¬λΆ λ μ μμ΅λλ€.
μ¬κΈ°μ λμ¨ μ©μ΄λ₯Ό μ 리νμλ©΄,
Urgent updates: λ²νΌ ν΄λ¦, ν€λ³΄λ μ λ ₯κ³Ό κ°μ΄ μ§κ΄μ μΌλ‘ 보μμ λ μ λ°μ΄νΈκ° μ¦κ°μ μΌλ‘ μΌμ΄λλ κ²μ κΈ°λνλ μν κ°λ€μ λμμΌλ‘ ν©λλ€.
Transition updates: μ¬μ©μκ° μν κ°μ λ³νμ λ°λ₯Έ λͺ¨λ μ λ°μ΄νΈκ° λ·°μ μ¦κ°μ μΌλ‘ μΌμ΄λλ κ²μ κΈ°λνμ§ μμ΅λλ€.
μ°λ¦¬λ μΌλ°μ μΌλ‘ μμ μμμ κ°μ κ²μμ°½μ μ¬μ©ν λ μΌλ°μ μΌλ‘ μλ μλμμ± κΈ°λ₯μ΄ κ΅³μ΄ λ°λ‘λ°λ‘ μ¦κ°μ μΌλ‘ μλμ΄λ μμ°μ€λ½κ² 'ν κ·Έλ΄ μ μμ§' λΌλ λλμΌλ‘ λμ΄κ°κ³€ ν©λλ€. κ·Έλ¬λ λ§μ½ μ λ ₯μ°½μ λ΄κ° μΉλ κ²μμ΄κ° λλ¦¬κ² μ λ ₯μ΄ λλ©΄....μ°Έμ μ μμ΅λλ€ π
μ΄λ² 18 λ²μ μμλ startTransition
ν¨μλ₯Ό λ§λ€μ΄ μ°μ μμλ₯Ό μ ν΄μ€ μ μμ΅λλ€ !!!
import { startTransition } from 'react';
// Urgent: Show what was typed
setInputValue(input);
// Mark any state updates inside as transitions
startTransition(() => {
// Transition: Show the results
setSearchQuery(input);
});
startTransition()
μ μμΈ λΆλΆμ΄ μ°μ μμκ° λμ μνκΈ° λλ¬Έμ μ
λ°μ΄νΈκ° λ°μνκ² λλ©΄λ λλ§ μ
λ°μ΄νΈκ° μ€λ¨λκ³ ν€ μ
λ ₯μ΄ λ€ λλ μ΄νμ μ
λ°μ΄νΈλ§ λ°μνκ² λ©λλ€.
π : κ·Έλμ κ²°κ΅ λ¬΄μ¨ μ΄μ μ΄ μλμ?
π€ : μ¬μ©μμκ² λ³΄μ¬μ§μ§ μλ κ΄λ ¨μλ λΆλΆμ κ΅³μ΄ λ λλ§ νλλ° μμ΄μ μκ°μ λλΉν νμκ° μμ΄μ§λλ€!
π : κ·Έλ¬λ©΄ μ κΈ°λ₯μ μ΄λ¨λ μμ£Ό μ°λ©΄ μ’μμ?
π€ : μμ κ°μ μ΄μ μΌλ‘ λ°±κ·ΈλΌμ΄λλ‘ μ΄λνλ €λ μ λ°μ΄νΈμ μ μ©ν©λλ€!
React μΉμ±μ SSRμ μ¬μ©νμ§ μκ³ μ€ννλ κ²½μ°, μ²μμ νμ 곡백μΌλ‘ νμκ° λλ κ²μ 보μ μ μμΌμ€ κ²λλ€. μλνλ©΄ λΈλΌμ°μ κ° μ΄ μΉμ±μ μ΄κΈ° μν΄ JSλ₯Ό κ°μ Έμμ μ½μ΄νκΈ° λλ¬Έμ κ°μ Έμ€λ κ·Έ μ κΉμ μκ°μ κ³΅λ°±μ΄ μκΈ°κΈ° λλ¬Έμ
λλ€.
κ·Έλ¬λ SSRμ μ¬μ©νλ©΄ μμ κ°μ μνΈμμ© μμ΄ JSκ° λ‘λλλ λμ μ±μ΄ μ΄λ»κ² 보μ΄λμ§ μ§μ λ³Ό μ μμ΅λλ€.
1 )SSR μλ λ°©μμ λ¨Όμ μλ²μμ λͺ¨λ κ΅¬μ± μμλ₯Ό λ λλ§ν λ€μ,
2 )HTML
μ λΈλΌμ°μ μ λ°λ‘ return ν΄μ€λλ€.
3 ) κ·Έ νJS
κ° νμμ κ°μ΄ λ‘λκ° λκ³ Hydrateμ μν΄HTML
μ΄ JSκ° μ μ©λHTML
λ‘ λ³μ νκ² λ©λλ€.
κ·Έλ¬λ μ΄ λ°©μμ μ£Όλ λ¬Έμ μ μ JS
λ₯Ό λ‘λνμ§ μλ ν νμ΄μ§μ μνΈμμ©μ΄ μ μ©λμ§ μλλ€λ λΉμ°ν λ¬Έμ κ° μμ΅λλ€.
μμ κ°μ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ μ΄λ² 리μνΈ 18μμλ SSRμ λν λ κ°μ§ μλ‘μ΄ κΈ°λ₯μ μ 곡ν©λλ€!
μ΄ κΈ°λ₯μ κ°λ¨ν λ§νμλ©΄ μλ²κ° κ΅¬μ± μμμ μΌλΆλ₯Ό Suspenseλ₯Ό μ¬μ©ν΄ λ³΄λΌ μ μμμ μλ―Έ ν©λλ€.
μ΄κ² λ¬΄μ¨ λ§μ΄λλ©΄, μ΄μ λ²μ μμλ νμ΄μ§ μ μ²΄κ° λͺ¨λ μ€λΉλκΈ° μ κΉμ§λ μ¬μ©μκ° νμ΄μ§μ λ€λ₯Έ λΆλΆμ λ³Ό μ μμμ΅λλ€. κ·Έλ¬λ Suspense
λ₯Ό μ¬μ©νλ©΄μ μ 체 νμ΄μ§λ₯Ό κ°κ° μμ μ²ν¬λ‘ λλμ΄ λ λλ§μ ν μ μκ² λμμ£Όκ³ μ΄κΈ° λ λλ§ μλμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
μλ₯Ό λ€μ΄ λ΄μ€ κΈ°μ¬λ₯Ό λ‘λν κ²½μ°, μ΄μ μλ μκ°μ΄ λ§μ΄ 걸리λ λκΈμ λ‘λνκΈ° μ κΉμ§ κΈ°λ€λ €μΌνλλ°, μ΄μ λ μμ€νμ€λ₯Ό μ¬μ©νμ¬ κΈ°μ¬λ₯Ό μ λ‘λνκ³ λκΈμ΄ μ€λΉλκΈ° μ μ HTML λΉνΈλ₯Ό λ³΄λΌ μ μμ΅λλ€.
<Navbar/>
<Article/>
<Suspense fallback ={<Loader />}>
<Comments />
</Suspense>
μμ κΈ°λ₯μ ν΅ν΄ μ©λμ΄ ν° μ»΄ν¬λνΈ λλλ§μ μν΄ νμ΄μ§ μ 체λ₯Ό κΈ°λ€λ¦΄ νμκ° μμ΄μ‘μ΅λλ€!! π κ·Έλ¬λ λ§μ½ κ·Ήλ¨μ μΌλ‘ μ»΄ν¬λνΈμ μ©λμ΄ ν¬κ³ 볡μ‘νλ©΄ μ΄λ»κ² λ κΉμ? κΈ°λ€λ¦¬λΌλ μ€νΌλλ§ κ³μ λ³΄κ³ μμκΉμ..?
κ·Έκ²μ λ°©μ§νκΈ° μν΄ λμ¨ κ²μ΄ Selective Hydration μ
λλ€. μ΄λ κ² λ³΅μ‘ν μ»΄ν¬λνΈλ₯Ό <Suspense>
λ‘ κ°μΈμ ν΄λ°± κ°μ΄ λ λλ§ λκ³ μμ΄λ λ³κ°λ‘ μ΄λ―Έ λ‘λλ μ»΄ν¬λνΈλ€ λ¨Όμ μ νμ μΌλ‘ hydrationμ μμν μ μκ² λμμ΅λλ€ π
π : λ¬΄μ¨ λ§μ΄μμ,,, γ γ γ γ γ γ γ γ
π€ : λ°μ λ¬Όμ μ£Όλ €κ³ νλλ° μλλ νκΊΌλ²μ λ¬Όμ 쀬μ΅λλ€. κ·Έλ¬λ μ§κΈ μΉκ΅¬κ° μ λ¨Ήκ³ λ° νμͺ½ λΌμΈμ λμμλ€μ? λ¬Ό μ£ΌκΈ° λ²νΌμ λλ₯΄λ©΄ μΉκ΅¬κ° λ¬Όμ΄ μ κ² μ£ ?? κ·Έλμ μΉκ΅¬κ° μΌμ΄λμ λ°μμ κΊΌμ§κΈ°κΉμ§ λΆλ¬΄κΈ°λ‘ λ€λ₯Έ μ€λΉλ λ°λ€ λ¨Όμ λ¬Όμ μ£Όλλ‘ ν©λλΉ γ γ
μΉ νμ΄μ§λ₯Ό μμλ‘ λ€λ©΄, λ¨Όμ λλλ§λ λ€λΉκ²μ΄μ
, μ¬μ΄λ λ°μ κΈ°λ₯μ JS κ° μ μ©λ HTML
κΈ°λ₯μ μ¬μ©ν μ μλ€λ λ»μ
λλ€!
λν μ¬μ©μμ μ€μ μ λ°λΌ μ΄λ€ μ»΄ν¬λνΈλ₯Ό λ¨Όμ hydration
μν¬μ§ μ°μ μμ λ₯Ό μ ν μ μμ΅λλ€!