Что такое Server Action
Часть раздела Основы Next.js путешествия по React на Coddy — урок 29 из 47.
Теперь вы можете читать данные на сервере. Пришло время для второй половины: их изменения.
До недавнего времени сохранение одной строки текста требовало удивительно много условностей. Вы писали эндпоинт:
// app/api/items/route.js
export async function POST(request) {
const body = await request.json();
saveItem(body.text);
return Response.json({ ok: true });
}…затем вызвали его из браузера:
await fetch('/api/items', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text }),
});Два файла, URL, method, headers и JSON в обоих направлениях, чтобы переместить одну строку из form в базу данных.
Server Action удаляет всё это. Напишите асинхронную функцию в файле, первая строка которого — 'use server':
// app/actions.js
'use server';
import { saveItem } from '../lib/db';
export async function addItem(formData) {
saveItem(formData.get('text'));
}…и передать эту функцию в форму:
<form action={addItem}>
<input name="text" />
<button type="submit">Add</button>
</form>Вот и всё. Стоит отметить три детали:
'use server'должна быть первой строкой файла: такой же маркер, как и'use client', только указывающий в другую сторону. Он говорит: всё, что экспортируется отсюда, выполняется на сервере.- Тело функции никогда не попадает в браузер. Ваши учётные данные базы данных находятся в безопасности внутри него: браузер получает только ссылку, которую он может вызвать.
- Вы не написали ни одного URL. Next.js создаёт эндпоинт за вас;
action={addItem}— это вся обвязка.
Одно из отличий от основ: эти поля ввода формы являются неконтролируемыми. Никаких useState, value и onChange: браузер сам хранит текст, а атрибут name — это то, как action находит его при отправке (submit).
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Next.js
2Маршрутизация и ссылки
Папки как маршрутыВложенные маршрутыСвязывание страницДинамические маршрутыСтраницы 404 (Not Found)Итоги: Маршрутизация3Макеты и метаданные
Корневой макетОбщая навигацияВложенные макетыМетаданные страницыДинамические метаданныеИтоги: Макеты6Server Actions
Что такое Server ActionФормы в действииЧтение данных формыОбновление страницыИтоги: Server Actions