Чтение данных формы
Часть раздела Основы Next.js путешествия по React на Coddy — урок 31 из 47.
Ваш action принимает один аргумент: объект FormData. Это встроенный объект браузера, и вам понадобится всего один его метод:
export async function addNote(formData) {
const text = formData.get('text');
const author = formData.get('author');
saveNote(text, author);
}Строка, которую вы передаете в get(), — это не id поля ввода и не его подпись. Это атрибут name:
<input name="author" /> → formData.get('author')Поле ввода без name невидимо для формы. Оно отображается, в него можно вводить текст, но его значение просто никогда не поступает: formData.get() возвращает null. Это самая распространенная ошибка в первой форме с server action, и она происходит незаметно.
get() всегда возвращает строку (или null), поэтому числовое поле нужно преобразовать:
const quantity = Number(formData.get('quantity'));Задание
ЛегкоФорма заметок подключена, но ничего полезного не сохраняется: у полей ввода нет name, а action сохраняет две пустые строки.
- В
app/page.jsxдобавьтеname="text"к первому полю ввода иname="author"ко второму. - В
app/actions.jsпрочитайте оба поля изformDataвместо использования пустых строк.
Оставьте id без изменений и сохраните вызов saveNote(text, author): изменятся только два значения над ним.
Попробуйте сами
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Next.js
2Маршрутизация и ссылки
Папки как маршрутыВложенные маршрутыСвязывание страницДинамические маршрутыСтраницы 404 (Not Found)Итоги: Маршрутизация3Макеты и метаданные
Корневой макетОбщая навигацияВложенные макетыМетаданные страницыДинамические метаданныеИтоги: Макеты6Server Actions
Что такое Server ActionФормы в действииЧтение данных формыОбновление страницыИтоги: Server Actions