РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnxSpFmPd 19 of 69 menu
◀ ▶

Ожидание отправки в NextJS

Давайте заблокируем повторную отправку, пока сервер обрабатывает форму. Хук useFormStatus из react-dom работает только внутри form и сообщает, идет ли сейчас отправка. Вынесем кнопку в дочерний клиентский компонент:

export let names = [];
'use server'; import { names } from './data'; export async function addName(formData) { let name = formData.get('name'); names.push(String(name).trim()); }
'use client'; import { useFormStatus } from 'react-dom'; export default function SubmitButton() { let { pending } = useFormStatus(); return ( <button type="submit" disabled={pending}> {pending ? 'Saving' : 'Save'} </button> ); }

Подключим кнопку внутри формы на серверной странице:

import { names } from './data'; import { addName } from './actions'; import SubmitButton from './SubmitButton'; export default function NamesPage() { return ( <div> <ul> {names.map(function (name, index) { return <li key={index}>{name}</li>; })} </ul> <form action={addName}> <input type="text" name="name" placeholder="Your name" /> <SubmitButton /> </form> </div> ); }

При сохранении комментария меняйте подпись на кнопке на английское Sending и отключайте ее до ответа сервера.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить