Серверные функции¶
Серверные функции позволяют клиентским компонентам вызывать асинхронные функции, которые выполняются на сервере.
Серверные функции предназначены для серверных компонентов React.
Примечание: до сентября 2024 года все серверные функции назывались «Server Actions». Если серверная функция передана в проп action или вызвана изнутри действия, это серверное действие (Server Action), но не все серверные функции являются серверными действиями. Названия в этой документации обновлены: серверные функции можно использовать для разных задач.
Как обеспечить поддержку серверных функций?
Хотя серверные функции в React 19 стабильны и не будут ломаться между минорными версиями, базовые API, которыми бандлер или фреймворк React Server Components реализует серверные функции, не следуют semver и могут ломаться между минорными версиями React 19.x.
Чтобы поддерживать серверные функции в бандлере или фреймворке, рекомендуем зафиксировать конкретную версию React или использовать релиз Canary. Мы продолжим работать с авторами бандлеров и фреймворков, чтобы в будущем стабилизировать API для реализации серверных функций.
Когда серверная функция объявлена с директивой "use server", фреймворк автоматически создаст ссылку на серверную функцию и передаст эту ссылку клиентскому компоненту. Когда функцию вызовут на клиенте, React отправит запрос на сервер, чтобы выполнить функцию, и вернёт результат.
Серверные функции можно создавать в серверных компонентах и передавать пропсами клиентским компонентам, либо импортировать и использовать в клиентских компонентах.
Использование¶
Создание серверной функции в серверном компоненте¶
Серверные компоненты могут объявлять серверные функции директивой "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 | |
Подробнее см. документацию по "use server".
Импорт серверных функций из клиентских компонентов¶
Клиентские компоненты могут импортировать серверные функции из файлов с директивой "use server":
1 2 3 4 5 | |
Когда бандлер собирает клиентский компонент EmptyNote, он создаёт в бандле ссылку на функцию createNote. Когда нажмут button, React отправит запрос на сервер, чтобы выполнить функцию createNote по переданной ссылке:
1 2 3 4 5 6 7 8 | |
Подробнее см. документацию по "use server".
Серверные функции с действиями¶
Серверные функции можно вызывать из действий на клиенте:
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 | |
Так можно получить состояние isPending серверной функции, обернув её в действие на клиенте.
Подробнее см. документацию Вызов серверной функции вне <form>
Серверные функции с действиями формы¶
Серверные функции работают с новыми возможностями форм в React 19.
Серверную функцию можно передать форме, чтобы форма автоматически отправлялась на сервер:
1 2 3 4 5 6 7 8 9 10 11 | |
Если отправка формы прошла успешно, React автоматически сбросит форму. Добавьте useActionState, чтобы получить состояние ожидания, последний ответ или поддержать прогрессивное улучшение.
Подробнее см. документацию Серверные функции в формах.
Серверные функции с useActionState¶
Серверные функции можно вызывать через useActionState в типичном случае, когда нужны только состояние ожидания действия и последний возвращённый ответ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Если useActionState используется вместе с серверными функциями, React также автоматически повторит отправки формы, сделанные до окончания гидратации. Пользователи смогут взаимодействовать с приложением ещё до того, как оно гидратируется.
Подробнее см. документацию useActionState.
Прогрессивное улучшение с useActionState¶
Серверные функции также поддерживают прогрессивное улучшение через третий аргумент useActionState.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Если в useActionState передана постоянная ссылка, React перенаправит на указанный URL, когда форма отправлена до загрузки бандла JavaScript.
Подробнее см. документацию useActionState.
Источник — https://react.dev/reference/rsc/server-functions