Actions у React 19
Що таке Actions
Action - це, по суті, функція (зазвичай асинхронна), яка запускає мутацію (зміну даних, відправку форми, обробку події) і яку React тепер розуміє як єдиний блок з автоматичним керуванням станом, помилками і оптимістичними оновленнями. (react.dev)
Тобто замість того щоб вручну писати isLoading, try/catch, setError, setPending, ви можете визначити Action-функцію, і React зробить значну частину цього за вас.
Основні можливості Actions
Ось ключові функції, які надає механізм Actions:
- Статус очікування (
pending): React автоматично відстежує, що Action виконується, і ви можете використовувати цей статус в UI. (react.dev) - Помилки: Якщо Action завершився з помилкою, React може пов'язати це з механізмом Error Boundary і відповідним UI-відображенням. (mux.com)
- Оптимістичні оновлення: Можна показати користувачу передбачуваний результат одразу (до завершення операції), а в разі невдачі - відкотити або скоригувати. (mux.com)
- Інтеграція з формами: Action можна передати як обробник форми (
action/formAction), і React автоматично пов'язує форму з Action, обробляє відправку, скидання форми і т.д. (react.dev) - Server Actions / Server Functions: Actions можуть виконуватися на сервері (серверні функції) і викликатися з клієнтського компонента, що спрощує архітектуру. (react.dev)
Приклад використання
javascript
// Припустимо, у React 19:
import { useActionState } from 'react';
async function updateName(previousState, formData) {
const name = formData.get('name');
const error = await api.updateName(name);
return error ? { error } : null;
}
function ChangeName() {
const [error, submitAction, isPending] = useActionState(updateName, null);
return (
<form action={submitAction}>
<input type="text" name="name" />
<button type="submit" disabled={isPending}>
Update
</button>
{error && <p>{error.error}</p>}
</form>
);
}Тут:
updateName- це Action.useActionStateдає: поточний стан (наприклад, помилку), функціюsubmitActionдля підключення до<form>і прапорецьisPending.- React дбає про очікування, контроль помилки і скидання форми. (react.dev)
Чому це зручно
- Зменшує шаблонний код (раніше було багато
useState,useEffect,try/catch,isLoading). - Робить форми і мутації даних більш декларативними.
- Краще працює з конкурентним рендерингом і серверною стороною (SSR).
- Підвищує зручність розробки і читабельність коду.
Що важливо знати
- Actions - це не просто подія (
onClick), як раніше, а окремий абстрактний блок з життєвим циклом. - Попри декларативність, вам все одно потрібно продумати логіку в Action (що відбувається при успіху/помилці).
- Деякі частини потребують підтримки з боку фреймворку або бандлера (наприклад, Server Actions).
- Це нова модель - можливо, бібліотеки ще не повною мірою адаптовані.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.