Netlify 表单不适用于 Material-UI 模态

Netlify form doesn't work with a Material-UI modal

我在 Netlify 上有一个简单的 Next.js 应用程序,它打开一个表单来单击订阅按钮。

代码

这是索引文件:

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>
  );
}

这是模态:

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>
  );
}

我还有一个带有成功消息的简单 pages/success.js 应用程序。

问题

当我点击提交按钮时,出现一个 404 页面。

尝试过的解决方案

有人有想法吗?

这是因为您的模式没有在构建时呈现。

Netlify 将分析您的 HTML 以找到 data-netlify="true" 标签。 但是在构建时,没有标签,因为 JavaScript 将在用户单击按钮而不是构建时添加模式。

因此,您可以在 Next 项目上创建另一个页面,例如 /subscribe 使用表单。因此表单将在构建时呈现,Netlify 将能够检测到您的表单。