React 18
React 18
React 19 betaκ° 24λ 04μμ μΆμλμ΄ λ³΅μ΅ ν κ²Έ 18μ λν΄ κΈμ μμ±ν©λλ€.
1. μλ λ°°μΉ (Automatic Batching)
React 18μμ κ°μ₯ ν° λ³ν μ€ νλλ μλ λ°°μΉμ λλ€. μλ λ°°μΉλ μ¬λ¬ μν μ λ°μ΄νΈλ₯Ό νλμ λ λλ§μΌλ‘ λ³ν©νμ¬ μ ν리μΌμ΄μ μ μ±λ₯μ ν₯μμν€λ κΈ°λ₯μ λλ€. μ΄μ λ²μ μμλ μ΄λ²€νΈ νΈλ€λ¬ λ΄μμλ§ λ°°μΉκ° μΌμ΄λ¬μ§λ§, React 18μμλ λΉλκΈ° μ½λ λ΄μμλ μλμΌλ‘ λ°°μΉκ° μ΄λ£¨μ΄μ§λλ€.
import { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
const [text, setText] = useState('');
const handleClick = async () => {
await fetch('/api/data');
setCount(c => c + 1);
setText('Updated!');
};
return (
<div>
<button onClick={handleClick}>Click me</button>
<p>{count}</p>
<p>{text}</p>
</div>
);
}
μ μ½λμμ handleClick
ν¨μλ λΉλκΈ° ν¨μμ΄μ§λ§, μν μ
λ°μ΄νΈλ μλμΌλ‘ λ°°μΉλμ΄ νλμ λ λλ§μΌλ‘ μ²λ¦¬λ©λλ€. ν΄λΉ κΈ°λ₯μΌλ‘ νλ‘κ·Έλ¨ μ±λ₯ μ΅μ νμ ν° λμμ΄ λ©λλ€.
2. startTransition
API
React 18μ μ¬μ©μ μΈν°νμ΄μ€κ° λ³΄λ€ λΆλλ½κ³ λ°μμ± μκ² λμνλλ‘ λκΈ° μν΄ μλ‘μ΄ startTransition
APIλ₯Ό λμ
νμ΅λλ€. μ΄ APIλ μν μ
λ°μ΄νΈλ₯Ό βμ νβμΌλ‘ νμνμ¬, Reactκ° μ€μν μ
λ°μ΄νΈλ₯Ό μ°μ μ²λ¦¬νκ³ λ μ€μν μ
λ°μ΄νΈλ₯Ό λμ€μ μ²λ¦¬ν μ μκ² ν©λλ€.
import { useState, startTransition } from 'react';
function MyComponent() {
const [isPending, setIsPending] = useState(false);
const [list, setList] = useState([]);
const handleClick = () => {
setIsPending(true);
startTransition(() => {
const newList = generateBigList(); // ν° λ¦¬μ€νΈλ₯Ό μμ±νλ ν¨μ
setList(newList);
setIsPending(false);
});
};
return (
<div>
<button onClick={handleClick}>Generate List</button>
{isPending ? <p>Loading...</p> : <List items={list} />}
</div>
);
}
μ μ½λμμ startTransition
μ ν° λ¦¬μ€νΈλ₯Ό μμ±νλ μμ
μ μ νμΌλ‘ μ²λ¦¬νμ¬, μ¬μ©μλ λ²νΌ ν΄λ¦ μ μ§μ° μμ΄ μ¦κ°μ μΈ νΌλλ°±μ λ°μ μ μμ΅λλ€.
3. Concurrent Features (λμμ± κΈ°λ₯)
React 18μ λμμ± λͺ¨λλ₯Ό κΈ°λ³ΈμΌλ‘ λμ
νμ¬, λ λμ μ±λ₯κ³Ό μ¬μ©μ κ²½νμ μ 곡ν©λλ€. λμμ± λͺ¨λλ Reactκ° μ¬λ¬ μν μ
λ°μ΄νΈλ₯Ό ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μκ² νλ©°, μ ν리μΌμ΄μ
μ΄ λ³΄λ€ λΆλλ½κ² μλνλλ‘ λμ΅λλ€. λμμ± λͺ¨λλ₯Ό μ¬μ©νλ €λ©΄, createRoot
λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ
μ μ΄κΈ°νν΄μΌ ν©λλ€.
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
λμμ± λͺ¨λμ μλ λ°©μ λμμ± λͺ¨λλ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬λ¬ μν μ λ°μ΄νΈλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€. μ£Όμ κ°λ μ λ€μκ³Ό κ°μ΅λλ€:
μμ λΆν : κΈ΄ μμ μ μ¬λ¬ μμ μμ μΌλ‘ λΆν νμ¬, Reactκ° μ€μν μμ μ μ°μ μ μΌλ‘ μ²λ¦¬ν μ μκ² ν©λλ€. μμ μ€λ¨ λ° μ¬κ°: Reactλ μμ μ μ€λ¨νκ³ μ€μν μμ μ λ¨Όμ μ²λ¦¬ν ν, λ€μ μ€λ¨λ μμ μ μ΄μ΄μ ν μ μμ΅λλ€. μ ν μ²λ¦¬: Reactλ μν μ λ°μ΄νΈλ₯Ό μ νμΌλ‘ μ²λ¦¬νμ¬, μ€μν μ λ°μ΄νΈμ λ μ€μν μ λ°μ΄νΈλ₯Ό ꡬλΆν μ μμ΅λλ€.
μ΄ μ½λλ₯Ό ν΅ν΄ λμμ± λͺ¨λλ₯Ό νμ±ννλ©΄, Reactλ λ λμ λ λλ§ μ±λ₯μ μ 곡νκ³ , μ¬μ©μ μΈν°νμ΄μ€μ μλ΅μ±μ ν₯μμν¬ μ μμ΅λλ€.
4. μλ² μ»΄ν¬λνΈ (Server Components)
React 18μμλ μλ² μ»΄ν¬λνΈλ₯Ό λμ νμ¬, μλ²μμ μ§μ λ λλ§ν μ μλ μ»΄ν¬λνΈλ₯Ό λ§λ€ μ μμ΅λλ€. μ΄λ μ΄κΈ° λ‘λ© μκ°μ λ¨μΆνκ³ , ν΄λΌμ΄μΈνΈ μΈ‘μμ λΆνμν JavaScript λ‘λλ₯Ό μ€μ΄λ λ° λμμ΄ λ©λλ€. μλ² μ»΄ν¬λνΈλ μμ§ μ€ν λ¨κ³μ μμ§λ§, μμΌλ‘ Reactμ μ€μν κΈ°λ₯μΌλ‘ μ리 μ‘μ κ²μΌλ‘ κΈ°λλ©λλ€.
// MyServerComponent.server.js
import React from 'react';
export default function MyServerComponent() {
const data = fetchDataFromServer(); // μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ ν¨μ
return <div>{data}</div>;
}
μλ² μ»΄ν¬λνΈλ μλ²μμ λ λλ§λκΈ° λλ¬Έμ μ΄κΈ° λ‘λ© μκ°μ ν¬κ² λ¨μΆν μ μμ΅λλ€. ν΄λΌμ΄μΈνΈ μΈ‘μμ νμν JavaScript μμ μ€μ΄κ³ , λΈλΌμ°μ κ° μ΄κΈ° λ‘λ μ λ μ μ μμ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λνμ¬ λΉ λ₯΄κ² νμ΄μ§λ₯Ό λ λλ§ν μ μμ΅λλ€.
5. μμ€νμ€ (Suspense)
React 18μ μμ€νμ€λ₯Ό ν΅ν΄ λ°μ΄ν° λ‘λ© μ λ³΄λ€ ν¨μ¨μ μΈ μ²λ¦¬λ₯Ό κ°λ₯νκ² ν©λλ€. μμ€νμ€λ μ»΄ν¬λνΈκ° λΉλκΈ° μμ μ μλ£ν λκΉμ§ λ‘λ© μνλ₯Ό νμν μ μλλ‘ λμμ€λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μ κ²½νμ ν₯μμν€κ³ , λΉλκΈ° μμ μλ£ ν μ»΄ν¬λνΈλ₯Ό λ λλ§ν μ μμ΅λλ€.
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function App() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
</div>
);
}
μ μ½λμμ React.lazy
μ Suspense
λ₯Ό μ¬μ©νμ¬, MyComponent
κ° λ‘λλ λκΉμ§ λ‘λ© λ©μμ§λ₯Ό νμν©λλ€. μ΄λ μ¬μ©μμκ² λΉλκΈ° λ°μ΄ν° λ‘λ© μ€μμ λͺ
νν μλ €μ€ μ μμ΄, λ λμ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
κ²°λ‘
React 18μ κ°λ°μλ€μ΄ λ³΄λ€ μ±λ₯ μ’μ μ ν리μΌμ΄μ
μ λ§λ€ μ μλλ‘ λλ λ€μν μλ‘μ΄ κΈ°λ₯λ€μ λμ
νμ΅λλ€. μλ λ°°μΉ, startTransition
API, λμμ± κΈ°λ₯, μλ² μ»΄ν¬λνΈ, κ·Έλ¦¬κ³ μμ€νμ€λ λͺ¨λ κ°λ°μ κ²½νμ ν₯μμν€κ³ , μ ν리μΌμ΄μ
μ μ±λ₯μ κ·Ήλννλ λ° ν° λμμ΄ λ©λλ€.