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 页面。
尝试过的解决方案
- 我已经尝试了表单标签中的每个标签。
- 我已经尝试使用 Next build & Next export 和默认的 Next config deploy。
- 我试过 Material UI 组件或 HTML 本机元素
有人有想法吗?
这是因为您的模式没有在构建时呈现。
Netlify 将分析您的 HTML 以找到 data-netlify="true"
标签。
但是在构建时,没有标签,因为 JavaScript 将在用户单击按钮而不是构建时添加模式。
因此,您可以在 Next 项目上创建另一个页面,例如 /subscribe
使用表单。因此表单将在构建时呈现,Netlify 将能够检测到您的表单。
我在 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 页面。
尝试过的解决方案
- 我已经尝试了表单标签中的每个标签。
- 我已经尝试使用 Next build & Next export 和默认的 Next config deploy。
- 我试过 Material UI 组件或 HTML 本机元素
有人有想法吗?
这是因为您的模式没有在构建时呈现。
Netlify 将分析您的 HTML 以找到 data-netlify="true"
标签。
但是在构建时,没有标签,因为 JavaScript 将在用户单击按钮而不是构建时添加模式。
因此,您可以在 Next 项目上创建另一个页面,例如 /subscribe
使用表单。因此表单将在构建时呈现,Netlify 将能够检测到您的表单。