Tengo una aplicación Next.js simple en Netlify que abre un formulario para hacer clic en el botón de suscripción.
Aquí está el archivo de índice:
pages/index.js
import React from 'react'; import { SubscribeModal } from '../components/SubscribeModal'; export default function Home() { const [open, setOpen] = React.useState(false); return ( <div> <button onClick={() => setOpen(true)}>Sign in in newsletters</button> <SubscribeModal open={open} onClose={() => setOpen(false)} onSuccess={() => setOpenBadNews(true)} /> </div> ); }Aquí está el modal:
components/SubscribeModal.js
import { Dialog, DialogTitle } from '@mui/material'; export function SubscribeModal({ open, onClose, onSuccess }) { return ( <Dialog onClose={onClose} open={open}> <DialogTitle> <b>Login</b> </DialogTitle> <form name="contact" action="/success" method="POST" data-netlify="true"> <input type="hidden" name="form-name" value="contact" /> <p> <label htmlFor="youremail">Your Email: </label>{' '} <input type="email" name="email" id="youremail" /> </p> <p> <button type="submit">Send</button> </p> </form> </Dialog> ); } También tengo una aplicación sencilla de pages/success.js con un mensaje de éxito.
Cuando hago clic en el botón Enviar, aparece una página 404.
¿Alguien tiene una idea?
Es porque su modal no se representa en la compilación.
Netlify analizará su HTML para encontrar la data-netlify="true" . Pero en la compilación, no hay ninguna etiqueta porque JavaScript agregará el modal cuando el usuario haga clic en el botón y no en el momento de la compilación.
Entonces puede crear otra página en su próximo proyecto como /subscribe con el formulario. Entonces, el formulario se procesará en el momento de la compilación y Netlify podrá detectar su formulario.