React19 RC(Release Candidate)λ νμ¬ κ°λ° μ€μ΄λ©° 2024λ 9μ κΈ°μ€μΌλ‘ μμ§ μ μ μΆμλμ§ μμλ€.
κ°μ₯ μ΅μ μ 보(2024λ 4μ κΈ°μ€, React Blog μ°Έκ³ )λ₯Ό λ°νμΌλ‘ μ€λͺ νμλ©΄ React 19λ μ΄μ λ²μ λ€κ³Ό λΉκ΅ν΄ λͺ κ°μ§ μ£Όμ κ°μ μ¬νκ³Ό μλ‘μ΄ κΈ°λ₯λ€μ ν¬ν¨ν κ²μΌλ‘ μμλλ€.
- μ±λ₯ κ°μ : λ λλ§κ³Ό μν μ λ°μ΄νΈ μ±λ₯μ΄ ν₯μλ μ λ§.
- μλ² μ»΄ν¬λνΈ: μλ² μ¬μ΄λ λ λλ§μ λμ± ν¨μ¨μ μΌλ‘ λ§λ€μ΄μ£Όλ μλ² μ»΄ν¬λνΈμ μμ ν ꡬνμ΄ ν¬ν¨λ κ°λ₯μ±μ΄ λλ€.
- λμμ± κΈ°λ₯ κ°μ : React 18μμ λμ λ λμμ± κΈ°λ₯λ€μ΄ λμ± μμ νλκ³ λ°μ λ κ²μΌλ‘ μμ.
- μλ‘μ΄ ν : κ°λ°μλ€μ μμ μ λμ± νΈλ¦¬νκ² λ§λ€μ΄μ€ μλ‘μ΄ ν λ€μ΄ μΆκ°λ μ μλ€.
- νμ μ€ν¬λ¦½νΈ μ§μ κ°ν: νμ μ€ν¬λ¦½νΈμμ ν΅ν©μ΄ λμ± κ°νλ κ²μΌλ‘ 보μΈλ€.
Actions
κΈ°μ‘΄μλ pending, states, errors, optimistic updates, sequential requests λ±μ λν μ‘μ μ μλμΌλ‘ μ²λ¦¬ν΄μΌ νλ€.
// Before Actions
function UpdateName({}) {
const [name, setName] = useState("");
const [error, setError] = useState(null);
const [isPending, setIsPending] = useState(false);
const handleSubmit = async () => {
setIsPending(true);
const error = await updateName(name);
setIsPending(false);
if (error) {
setError(error);
return;
}
redirect("/path");
};
return (
<div>
<input value={name} onChange={(event) => setName(event.target.value)} />
<button onClick={handleSubmit} disabled={isPending}>
Update
</button>
{error && <p>{error}</p>}
</div>
);
}
νμ§λ§, React 19 μμλ μ ν(transitions)μμ λΉλκΈ° ν¨μλ₯Ό μ¬μ©νμ¬, pending, states, errors, optimistic updates, sequential requests λ±μ λν μ‘μ μ μλμΌλ‘ μ²λ¦¬ν μ μλ μ§μμ΄ μΆκ°λλ€. μλ₯Ό λ€μ΄ μλμ κ°μ useTransition μ μ¬μ©ν μ μλ€.
// Using pending state from Actions
function UpdateName({}) {
const [name, setName] = useState("");
const [error, setError] = useState(null);
const [isPending, startTransition] = useTransition();
const handleSubmit = () => {
startTransition(async () => {
const error = await updateName(name);
if (error) {
setError(error);
return;
}
redirect("/path");
})
};
return (
<div>
<input value={name} onChange={(event) => setName(event.target.value)} />
<button onClick={handleSubmit} disabled={isPending}>
Update
</button>
{error && <p>{error}</p>}
</div>
);
}
λν Actionsμ μΌλ°μ μΈ μ¬μ© μ¬λ‘λ₯Ό λ μ½κ² λ§λ€κΈ° μν΄ useActionStateλΌλ μλ‘μ΄ hookμ΄ μΆκ°λμλ€.
μ΄ hookμ ν¨μλ₯Ό μΈμλ‘ λ°κ³ , νΈμΆν μ μλ λνλ Actionμ λ°ννλ€. λνλ Actionμ΄ νΈμΆλ λ, useActionStateλ Actionμ λ§μ§λ§ κ²°κ³Όλ₯Ό dataλ‘, Actionμ λκΈ° μνλ₯Ό pendingμΌλ‘ λ°ννλ€.
const [error, submitAction, isPending] = useActionState(
async (previousState, newName) => {
const error = await updateName(newName);
if (error) {
// You can return any result of the action.
// Here, we return only the error.
return error;
}
// handle success
return null;
},
null,
);
μκ°λ μ νν κΈ°λ₯κ³Ό λ³κ²½μ¬νμ 곡μ μΆμ μ κΉμ§ κ³μ μμ λ μ μμΌλ©°, μΆκ°μ μΌλ‘ React 19μ μ νν μΈλΆμ¬νμ μκ³ μΆλ€λ©΄, React 곡μ λΈλ‘κ·Έλ GitHub μ μ₯μλ₯Ό νμΈνλ©΄ λλ€.
πΈ μΆμ² πΈ
'React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React 18 λ³κ²½μ μ 리 (0) | 2024.11.03 |
---|---|
[ 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 |