[Перевод] Новые клиентские хуки React 19
Вопреки распространенному мнению, основная команда разработчиков React занимается не только серверными компонентами React
и Next.js. В следующей версии — React 19
— появятся новые клиентские хуки. Они сфокусированы на двух ключевых аспектах: выборке данных и работе с формами. Эти хуки повысят производительность всех React-разработчиков, включая тех, кто создает одностраничные приложения.
Без дальнейших предисловий давайте познакомимся с новыми хуками!
- use (Promise)
- use (Context)
- Form Actions
- useFormState
- useFormStatus
- useOptimistic
- Бонус: Async Transitions
Примечание: эти хуки доступны только в экспериментальной (canary) версии React. Они должны быть включены в новую версию React 19
, но до финального релиза в API возможны изменения.
use (Promise)
Этот хук представляет собой официальное API для «ожидания данных» (suspending) на клиенте. Ему можно передать промис, и React
будет ждать его выполнения. Основной синтаксис, взятый из документации React, выглядит следующим образом:
import { use } from 'react';
function MessageComponent({ messagePromise }) {
const message = use(messagePromise);
// ...
}
Хорошая новость заключается в том, что этот хук можно использовать для выборки данных (data fetching). Вот пример запроса данных при монтировании компонента и нажатии на кнопку. Обратите внимание, что в коде не используется хук useEffect
:
Помните это предупреждение в документации
?
Выборка данных с поддержкой Suspense без самодостаточного фреймворка не поддерживается.
Но в React 19
это больше не актуально.
Хук use
обладает интересной особенностью: в отличие от других хуков React
, его можно вызывать внутри циклов и условных операторов, таких как if
.
Означает ли это, что для получения данных на клиенте больше не нужно использовать сторонние библиотеки, например, TanStack Query? Что ж, нам еще предстоит это выяснить, поскольку TanStack Query делает гораздо больше, чем просто разрешает промис.
Но это шаг в правильном направлении, который значительно упрощает создание одностраничных приложений, работающих с REST
или GraphQL API
. Я в восторге от этого нового хука!
Подробнее о хуке use(Promise)
читайте здесь.
use (Context)
Хук use
также можно использовать для чтения контекста React
. Он работает аналогично хуку useContext
, за исключением того, что его можно вызывать внутри циклов и условных операторов, таких как if
.
import { use } from 'react';
function HorizontalRule({ show }) {
if (show) {
const theme = use(ThemeContext);
return
;
}
return false;
}
Это упрощает иерархию компонентов в некоторых вариантах использования. Ранее, чтобы прочитать контекст в таких случаях, приходилось разделять компонент на две части.
Это значительно улучшает производительность, поскольку теперь можно условно пропустить повторный рендеринг компонента, даже если значение контекста изменилось.
Подробнее о хуке use(Context)
читайте здесь.
Form Actions
Эта фича позволяет передавать функцию в проп action
тега
Вот как можно отобразить подтверждение или сообщение об ошибке, возвращаемое