TGViewer
Заметки про React Заметки про React @ru_react_notes · 3.43K subscribers
Post #484 3.45K
React и FormData

Для сбора данных формы можно использовать FormData – объект, который предоставляет геттеры и сеттеры для значений формы. Его можно использовать во время сабмита формы:


function onSubmit(event: React.FormEvent) {
event.preventDefault()
const formData = new FormData(event.target)

const formValues = {
name: formData.get('name')
email: formData.get('email)
}
}


Чтобы избавиться от геттеров, можно использовать Object.fromEntries для представления данных в виде объекта:


const formValues = Object.fromEntries(formData)
console.log(formValues) { name: 'my name', email: 'name@someemail.com' }
typeof formValues // { [k: string]: FormDataEntryValue }


Если вы работаете с TypeScript, то при использовании FormData могут возникнуть проблемы с типизацией. Эти проблемы можно решить с помощью схемы Zod и парсинга данных:


const formValues = Object.fromEntries(formData) // ❌ TYPE: { [k: string]: FormDataEntryValue }

const results = myFormSchema.safeParse(formValues)
if (results.success) {
results.data // ✅ TYPE: { email: string, quantity: number }
console.log(results.data.email) // name@someemail.com
console.log(results.data.quantity) // 5
} else {
// Обработка ошибки
}


React 19 способствует использованию FormData и позволяет получать данные формы при сабмите через проп action:


function MyForm() {
function formAction(formData: FormData) {
// Получаем экземпляр formData вместо event
}

return <form action={formAction}>...</form>
}


https://reacttraining.com/blog/react-and-form-data
ReactTraining.com React and FormData React Corporate Workshops, Training, and Consulting
  • 👍 15
  • 👎 1
More from @ru_react_notes
  1. Jun 24, 2025Реактивность – это легко Стандартный useContext заставляет обновляться все компоненты-потр…
  2. Jun 17, 2025Остерегайтесь скрытых проблем при работе с search params Типо-безопасность — это только ве…
  3. Jun 4, 2025Почему Error Boundary, а не просто try/catch для компонентов В React нельзя использовать t…
  4. May 29, 2025Анонс TypeScript Native Вышла превью версия TypeScript написанная на Go. Ее можно установи…
  5. May 27, 2025Управление фокусом в React с помощью flushSync Установить фокус на инпуте сразу в React мо…
  6. May 15, 2025TanStack DB TanStack представила новую библиотеку – TanStack DB – реактивный клиентский ст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →