【发布时间】:2021-09-12 09:16:37
【问题描述】:
您好,我正在尝试在 React/Next.js 应用程序中使用 React Bootstrap 设置联系表单。提交后如何重置表单?当我添加重置句柄时,验证不再起作用。
// Form validation
const [validated, setValidated] = useState(false);
// Thank you Message
const [thankYouMessage, setThankYouMessage] = useState(false);
// Form submit handler
async function handleSubmit(e) {
e.preventDefault();
e.stopPropagation();
const formData = new FormData();
Array.from(e.currentTarget.elements).forEach((field) => {
if (!field.name) return;
formData.append(field.name, field.value);
});
await fetch(
"https://domain.tld/wp-json/contact-form-7/v1/contact-forms/1234/feedback",
{
body: formData,
method: "POST",
}
)
.then((response) => response.json())
.then((response) => {
if (response.status === "mail_sent") {
setThankYouMessage(!thankYouMessage);
} else if (response.status === "mail_failed") {
alert("Message failed to send.");
}
});
setValidated(true);
}
这是表格:
<div>
<Form
noValidate
validated={validated}
onSubmit={handleSubmit}
>
<Form.Group controlId="your-name">
<Form.Control
required
type="text"
placeholder="Your name"
name="your-name"
/>
<Form.Control.Feedback type="invalid">
Please enter your name
</Form.Control.Feedback>
</Form.Group>
<Form.Group controlId="your-email">
<Form.Control
required
type="email"
placeholder="Your email address"
name="your-email"
/>
<Form.Control.Feedback type="invalid">
Please enter your email
</Form.Control.Feedback>
</Form.Group>
<Form.Group controlId="your-message">
<Form.Control
as="textarea"
cols={30}
rows={6}
placeholder="Write your message..."
name="your-message"
/>
</Form.Group>
<Button type="submit" variant="primary" size="lg">
Send Message
<span></span>
</Button>
</Form>
<Alert
variant="success"
className={thankYouMessage ? "d-block mt-3" : "d-none"}
>
Thank you for your message. It has been sent.
</Alert>
</div>
我尝试使用useRef() 设置重置句柄,但没有成功:
const formRef = useRef(null);
const handleReset = () => {
formRef.current.reset();
setValidated(false);
};
然后在表单上添加ref={formRef} 和setValidated(true); 之后我做了handleReset(); 但随后验证不再起作用。
欢迎对此提出任何建议,也欢迎任何有关代码的 cmets!
这是将 ref={formRef} 添加到 Form 标签时发生的 gif 图像:
const formRef = useRef();
const handleReset = () => {
formRef.current.reset();
setValidated(false);
};
在获取中:
.then((response) => response.json())
.then((response) => {
if (response.status === "mail_sent") {
setThankYouMessage(!thankYouMessage);
handleReset();
} else if (response.status === "mail_failed") {
alert("Message failed to send.");
}
});
【问题讨论】:
标签: reactjs forms next.js react-bootstrap