Четыре API,
useActionState, useOptimistic, useFormStatus и useTransition, обычно объясняют по отдельности, и остаётся ощущение, что нужно выбрать один. Шубхра Похария показывает, что это четыре входа в один механизм: функция становится Action, когда вызвана внутри startTransition, и это весь критерий.Дальше роли простые.
useActionState хранит результат и pending; ошибка попадает в состояние, только если action сам её вернёт, иначе это обычное исключение. useOptimistic показывает предполагаемый результат до ответа сервера. useFormStatus читает pending ближайшей формы. useTransition для Action вне формы. Функция в <form action={fn}> получает FormData, preventDefault не нужен, отправка всегда POST независимо от атрибута method.Две ловушки. React 19 разрешил async внутри transition, но всё после
await нужно оборачивать во вложенный startTransition. И useTransition не гарантирует порядок завершения конкурентных Actions, порядок держат только <form action> и useActionState. В конце квиз на 15 вопросов, чтобы проверить себя. Разбор на dev.to.#react