μ€λμ React19 release versionμ΄ λμ€κΈ° μ μ React 18μ ν° λ³κ²½μ μ λν΄ μ΄ν΄λ³΄λ €κ³ νλ€.
νμ¬ κΈ°μ€ React κ°μ₯ μ΅μ λ²μ μ 18.3.1 μ΄λ€.(2024λ 4μ 26μΌ)
κ·Έλ¦¬κ³ React18μ 2022λ 3μ 29μΌμ μ μ λ¦΄λ¦¬μ¦ λμλ€.
1. λμ λ λλ§(Concurrent Rendering)
λμ λ λλ§(Concurrent Rendering)μ μ¬μ©μ μΈν°νμ΄μ€(UI)λ₯Ό λ μ μ°νκ³ ν¨μ¨μ μΌλ‘ λ λλ§ν μ μκ² ν΄μ£Όλ κΈ°λ₯μΌλ‘, μ ν΅μ μΈ λ λλ§ λ°©μμμλ μ»΄ν¬λνΈ νΈλ¦¬κ° λ³κ²½λ λ, λ³κ²½ μ¬νμ΄ ν λ²μ λ λλ§λλ©΄μ μ€λ μκ°μ΄ μμλλ©° UIκ° λ©μΆλ κ²μ²λΌ 보μ΄λ λ¬Έμ κ° λ°μνμλ€. λμ λ λλ§(Concurrent Rendering)μ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ Reactκ° νμν μμ μ μ€λ¨νκ±°λ μ°μ μμλ₯Ό μ‘°μ νλ©΄μ λ λλ§ μμ μ λ³λ ¬λ‘ μνν μ μλλ‘ λμμ£Όλ κΈ°λ₯μ΄λ€.
- μμ μ€λ¨ λ° μ¬κ° κ°λ₯: μ€λ 걸리λ μμ μ ν λ²μ λͺ¨λ μ²λ¦¬νμ§ μκ³ , νμν κ²½μ° μ§νμ€μ΄λ μμ μ μ€λ¨ νλ€κ° λμ€μ λ€μ μ¬κ°ν μ μλ€.
- μ°μ μμ κΈ°λ° μμ μ€μΌμ€λ§: λ λλ§ μμ μ μ°μ μμλ₯Ό μ€μ νμ¬ μ¬μ©μ μΈν°λ μ μ΄ λ μ€μν μν©μμλ ν΄λΉ μμ μ λ¨Όμ μ²λ¦¬νκ³ , κ·Έλ μ§ μμ μμ μ λμ€μ μ€ννλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ‘ νμ¬κΈ λ μΎμ ν κ²½νμ μ 곡ν μ μλ€.
- Suspense λ° Lazy Loadingκ³Όμ ν΅ν©: λμ λ λλ§(Concurrent Rendering)μ μ¬μ©νλ©΄ Suspenseμ React.lazyλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈκ° λ‘λ© μ€μΌ λ λΉλκΈ°μ μΌλ‘ UIλ₯Ό νμν μ μλ€. μ΄ λ°©μμΌλ‘ λκΈ°μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ ν₯μ μν¬ μ μλ€.
- μ μ§μ νμ΄λλ μ΄μ (Progressive Hydration): μλ²μ¬μ΄λ λ λλ§(SSR)κ³Ό κ²°ν©νμ¬ Reactκ° νμ΄μ§μ μ€μν λΆλΆλΆν° μνλ₯Ό μμνμ¬ μ΄κΈ° λ‘λ© μκ°μ μ€μ΄λ λ°©μμΌλ‘, νμ΄μ§κ° λ‘λλμ§λ§μ μνΈμμ©μ΄ νμν λΆλΆλΆν° μ²λ¦¬νκ³ λλ¨Έμ§ λΆλΆμ λμ€μ μ²λ¦¬νμ¬ μ±λ₯μ κ°μ ν μ μλ€.
* κΈ°μ‘΄μλ JavaScriptνΉμ±μ λμ λ λλ§ λ°©μμ΄ λΆκ°λ₯νλ€. JavaScriptμ λ¨μΌ μ€λ λ ꡬ쑰μ Reactμ μ΄κΈ° λ λλ§ λ°©μ(λκΈ°μ λ λλ§ λ°©μ)λλ¬Έμ΄μλ€. React 16μμ Fiber μν€ν μ³κ° λμ λλ©΄μ λΉλκΈ°μ λ λλ§ λ°©μμΌλ‘μ λ³νκ° κ°λ₯ν΄μ‘κ³ , μ΄λ₯Όν΅ν΄ λμ λͺ¨λ(Concurrent Mode)λΌλ μλ‘μ΄ λ°©μμ΄ λμ λ μ μμλ€.
2. μλ λ°°μΉ(Automatic Batching)
μ¬λ¬ μν μ λ°μ΄νΈλ₯Ό μλμΌλ‘ νλμ λ°°μΉλ‘ λ¬Άμ΄μ μ²λ¦¬ν΄μ€λ€. μ΄μ λ²μ μμλ μ΄λ²€νΈ νΈλ€λ¬ λ΄μμλ§ λ°°μΉμ΄ μ΄λ£¨μ΄μ‘μ§λ§, μ΄μ λ λΉλκΈ° ν¨μλ νμ΄λ¨Έ λ±μμλ μλμΌλ‘ λ°°μΉμ΄ μ μ©λλ€.
import { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
const [text, setText] = useState('');
const handleClick = async () => {
setCount(count + 1);
setText('Updated');
await new Promise(resolve => setTimeout(resolve, 1000));
setCount(count + 2);
setText('Updated again');
};
return (
<div>
<p>Count: {count}</p>
<p>Text: {text}</p>
<button onClick={handleClick}>Update</button>
</div>
);
}
μ μ½λμμ hadleClickμ μ€ννλ©΄, countμ textμ μν μ λ°μ΄νΈκ° λ λ² λ°μνμ§λ§ React 18μμλ ν λ²μ λ λλ§λ§ λ°μνλ€. λΉλκΈ° μμ μμμλ μλ λ°°μΉμ΄ μ μ©λκΈ° λλ¬Έμ΄λ€.
3. μ ν(Transitions)
μ¬μ©μμ μΈν°νμ΄μ€μ μν λ³ν μ€μ κΈ΄κΈνμ§ μμ μμ κ³Ό κΈ΄κΈν μμ μ ꡬλΆν΄ μ²λ¦¬νλ κΈ°λ₯μ΄λ€. μ΄λ₯Ό ν΅ν΄ UI μ λ°μ΄νΈλ₯Ό λ λΆλλ½κ² λ§λ€κ³ μ¬μ©μκ° λλΌλ λ°μμ±μ κ°μ ν μ μλ€. κΈ΄κΈνμ§ μμ μμ μ transitionμΌλ‘ νμνλ©΄ reactλ ν΄λΉ μμ μ λ°°κ²½μμ μ²λ¦¬νκ³ , μ€μν μμ μ μ°μ μμμ λ°λΌ λ¨Όμ μ€ννλ€.
μ ν(Transition)μ μ£Όμ κ°λ
- μ¦κ°μ μΈ μ λ°μ΄νΈ(Urgent Updates): λ²νΌ ν΄λ¦, μ λ ₯ νλ λ± μ¬μ©μ μ λ ₯μ μ¦κ°μ μΌλ‘ λ°μν΄μΌ νλ μ λ°μ΄νΈ. λ°μμ΄ λΉ λ₯΄κ² μ΄λ€μ ΈμΌ νλ―λ‘ λμ μ°μ μμλ‘ μ¦μ μ²λ¦¬λλ€.
- μ ν μ λ°μ΄νΈ(Transition Updates): νμ΄μ§ μ΄λ, 리μ€νΈ νν°λ§ λ±κ³Ό κ°μ΄ μκ° μ§μ°μ΄ νμ©λλ μ λ°μ΄νΈ. μ ν μ λ°μ΄νΈλ μ¬μ©μ μ λ ₯μ μ¦κ°μ μ΄μ§ μμλ λλ―λ‘ λ°°κ²½μμ μ²λ¦¬λ μ μλ€.
4.μμ€νμ€(Suspense)νμ₯
λ°μ΄ν° νμΉμ μν μμ€νμ€κ° λμ± κ°νλμλ€. λΉλκΈ°μ μΌλ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ λμ λ‘λ© μνλ₯Ό μ½κ² κ΄λ¦¬ν μ μκ³ , μλ²μ¬μ΄λ λ λλ§κ³Όμ νΈνμ±λ κ°μ λμλ€.
5. λ£¨νΈ API (New Root API)
ReactDOM.createRoot APIκ° λμ λμ΄ κΈ°μ‘΄μ ReactDOM.render λμ μ΄λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ λ λλ§ν μ μλ€. μλ‘μ΄ λ£¨νΈ APIλ λμ λͺ¨λμ κ°μ μλ‘μ΄ κΈ°λ₯λ€μ νμ©ν μ μκ² ν΄μ€λ€.
6. useId ν (useId hook)
κ³ μ ν IDλ₯Ό μμ±νμ¬ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μΌκ΄μ±μ μ μ§ν μ μκ² ν΄μ€λ€. μ΄λ νΉν μλ²μ¬μ΄λ λ λλ§μμ μ μ©νλ©° μ κ·Όμ± ν₯μμλ λμμ μ€λ€.
import { useId } from 'react';
function MyComponent() {
const id = useId();
return <input id={id} />;
}
7. μλ‘μ΄ ν μΆκ°
- useSyncExternalStore: μΈλΆ μ μ₯μμμ λκΈ°νλ₯Ό μν ν μΌλ‘, μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μμ ν΅ν©μ μ©μ΄νκ² ν΄μ€λ€. (Redux, Mobx, zustand λ±)
- useInsertionEffect: μ€νμΌ λΌμ΄λΈλ¬λ¦¬μμ ν΅ν©μ μν ν μΌλ‘ μ€νμΌ μ½μ μμ μ μ μ΄ν μ μλ€.
8. μλ² μ¬μ΄λ λ λλ§ κ°μ (SSR)
μ€νΈλ¦¬λ° SSRμ΄ λμ λμ΄ μ΄κΈ° λ‘λ© μλκ° λΉ¨λΌμ‘μΌλ©° μμ€νμ€λ₯Ό νμ©ν λ°μ΄ν° νμΉμ΄ κ°λ₯ν΄μ Έ SSRκ³Ό CSRμ κ²½κ³λ₯Ό λμ± μ μ°νκ² μ¬μ©ν μ μλ€. (λΉ λ₯Έ μ΄κΈ° λ‘λ© λ° SEOμ΅μ ν, μ¬μ©μ κ²½ν ν₯μ)
9. μ νμ νμ΄λλ μ΄μ (Selective Hydration)
νμν λΆλΆλ§ νμ΄λλ μ΄μ νμ¬ μ΄κΈ° λ‘λ© μ±λ₯μ μ΅μ νν μ μλ€. μ΄λ₯Ό ν΅ν΄ λκ·λͺ¨ μ ν리μΌμ΄μ μμλ ν¨μ¨μ μΈ λ λλ§μ΄ κ°λ₯ν΄μ‘λ€. (μ±λ₯ μ΅μ ν λ° λ¦¬μμ€ μ μ½)
10. React μλ² μ»΄ν¬λνΈ (React Server Components)
μλ²μμλ§ μ€νλλ μ»΄ν¬λνΈλ₯Ό μμ±ν μ μκ² ν΄μ£Όλ κΈ°λ₯μΌλ‘, ν΄λΌμ΄μΈνΈλ‘ μ μ‘λλ μλ°μ€ν¬λ¦½νΈμ μμ μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμλ€. (λ²λ€ ν¬κΈ° κ°μ λ° λ λλ§ μ±λ₯ ν₯μ)
11. κ°λ°μ λꡬ λ° λλ²κΉ μ±λ₯ ν₯μ
React DevToolsκ° μ λ°μ΄νΈλμ΄ μλ‘μ΄ λμ λͺ¨λ κΈ°λ₯κ³Ό μ ν μνμ λν μ§μμ΄ ν₯μλμκ³ , μ΄λ₯Ό ν΅ν΄ κ°λ°μκ° μ ν리μΌμ΄μ μ μνλ₯Ό λμ± μ½κ² νμ νκ³ λλ²κΉ ν μ μλ€.
12. μ±λ₯ μ΅μ ν λ° λ²κ·Έ μμ
λ€μν λ΄λΆ μ΅μ νκ° μ΄λ£¨μ΄μ Έ μ λ°μ μΈ μ±λ₯μ΄ ν₯μ λμκ³ κΈ°μ‘΄ λ²μ μμ λ°κ²¬λ μ¬λ¬ λ²κ·Έλ€μ΄ μμ λμλ€.
πΈ μΆμ² πΈ
https://github.com/facebook/react/releases
'React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ React ] React 19 RCμ λν΄μ μμ보μ (0) | 2024.09.23 |
---|---|
[ React ] Reactμ exportμ export default μ°¨μ΄μ μμ보기 (0) | 2024.08.18 |
[ React ] Chart UI ꡬνμ μν React λΌμ΄λΈλ¬λ¦¬ μ 리 (0) | 2024.06.23 |
Reactμ μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬, Zustandμ λν κ°λ΅ μ 리κΈ. (0) | 2024.06.02 |
[ Sentry ] F.Eμμ Sentryλ₯Ό νμ©νμ¬ λλ²κΉ νκΈ°. (0) | 2024.05.19 |