Серверные Actions¶
Серверные Actions позволяют клиентским компонентам вызывать асинхронные функции, выполняемые на сервере.
Как обеспечить поддержку серверных Actions?
Хотя серверные Actions в React 19 стабильны и не ломаются между основными версиями, базовые API, используемые для реализации серверных Actions в бандлере или фреймворке React Server Components, не соответствуют semver и могут ломаться между минимальными версиями React 19.x.
Чтобы поддерживать серверные Actions в виде бандлера или фреймворка, мы рекомендуем привязать их к определенной версии React или использовать релиз Canary. Мы продолжим работу с бандлерами и фреймворками, чтобы стабилизировать API, используемые для реализации серверных Actions, в будущем.
Когда серверное действие определено с помощью директивы "use server", ваш фреймворк автоматически создаст ссылку на серверную функцию и передаст ее клиентскому компоненту. Когда эта функция будет вызвана на клиенте, React отправит запрос на сервер для выполнения функции и вернет результат.
Серверные Actions могут быть созданы в серверных компонентах и переданы в качестве пропсов клиентским компонентам, или же они могут быть импортированы и использованы в клиентских компонентах.
Создание серверного действия из серверного компонента¶
Серверные компоненты могут определять серверные Actions с помощью директивы "use server":
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Когда React отображает серверный компонент EmptyNote, он создает ссылку на функцию createNoteAction и передает эту ссылку клиентскому компоненту Button. Когда кнопка будет нажата, React отправит запрос на сервер для выполнения функции createNoteAction с указанной ссылкой:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Подробнее см. документацию по "use server".
Импорт серверных Actions из клиентских компонентов¶
Клиентские компоненты могут импортировать серверные Actions из файлов, использующих директиву "use server":
1 2 3 4 5 | |
При сборке клиентского компонента EmptyNote в сборке будет создана ссылка на функцию createNoteAction. Когда button будет нажата, React отправит запрос на сервер для выполнения функции createNoteAction, используя предоставленную ссылку:
1 2 3 4 5 6 7 8 9 10 11 | |
Подробнее см. документацию для "use server".
Компоновка серверных Actions с Actions¶
Серверные Actions могут быть составлены с Actions на клиенте:
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Это позволяет вам получить доступ к состоянию isPending серверного действия, обернув его в действие на клиенте.
Подробнее см. документацию по Вызов серверного действия вне <form>
Действия формы с серверными действиями¶
Серверные Actions работают с новыми функциями форм в React 19.
Вы можете передать серверное действие в форму, чтобы автоматически отправить форму на сервер:
1 2 3 4 5 6 7 8 9 10 11 | |
Когда отправка формы пройдет успешно, React автоматически сбросит форму. Вы можете добавить useActionState для доступа к состоянию ожидания, последнему ответу или для поддержки прогрессивного улучшения.
Подробнее см. документацию по Серверным Actions in Forms.
Серверные Actions с useActionState¶
Вы можете скомпоновать серверные Actions с useActionState для распространенного случая, когда вам нужен доступ к состоянию ожидания действия и последнему возвращенному ответу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
При использовании useActionState с серверными Actions, React также будет автоматически воспроизводить отправленные формы до завершения гидратации. Это означает, что пользователи могут взаимодействовать с вашим приложением даже до того, как оно будет гидратировано.
Подробнее см. документацию для useActionState.
Прогрессивное улучшение с useActionState¶
Серверные Actions также поддерживают прогрессивное улучшение с помощью третьего аргумента useActionState.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
При указании permalink для useActionState, React перенаправит на указанный URL, если форма будет отправлена до загрузки сборки JavaScript.
Подробнее см. документацию для useActionState.
Источник — https://react.dev/reference/rsc/server-actions