【发布时间】:2020-10-13 22:08:23
【问题描述】:
我创建了一个表单来输入姓名、电子邮件、网站和消息。使用提交按钮输入详细信息后,我想重置所有字段。我不知道如何使用控制组件。请帮忙.. 这就是我输入输入字段的方式。
export default ({
noLabels = false,
margin = "",
small = false,
blueButton = false,
buttonLabel = null,
quickContact = false,
subject = "New message from website",
}) => {
const [name, setName] = useState(
process.env.NODE_ENV === "development" ? "abc" : ""
)
const [email, setEmail] = useState(
process.env.NODE_ENV === "development" ? "abc@blabla.io" : ""
)
const [phone, setPhone] = useState(
process.env.NODE_ENV === "development" ? "Phone" : ""
)
const [country, setCountry] = useState(
process.env.NODE_ENV === "development" ? "Country" : ""
)
const [message, setMessage] = useState(
process.env.NODE_ENV === "development" ? "Message" : ""
)
const [website, setWebsite] = useState(
process.env.NODE_ENV === "development" ? "abc.io" : ""
)
const handleSubmit = e => {
e.preventDefault()
var formData = new FormData()
formData.set("name", name)
formData.set("email", email)
formData.set("phone", phone)
formData.set("country", country)
formData.set("message", message)
formData.set("website", website)
formData.set("subject", subject)
api
.contact(formData)
.then(res => {
if (typeof window !== "undefined") {
const uikit = require("uikit")
uikit
.toggle(
document.getElementById(
quickContact
? "form_success_message_quick"
: "form_success_message"
)
)
.toggle()
}
})
.catch(error => {
if (typeof window !== "undefined") {
const uikit = require("uikit")
uikit
.toggle(
document.getElementById(
quickContact ? "form_error_message_quick" :
"form_error_message"
)
)
.toggle()
}
})
}
return (
<form
action="/send-mail.php"
className="uk-form contact_form"
method="post"
onSubmit={handleSubmit}
>
<div
className="uk-alert-primary contact-form-success-quick"
data-uk-alert
id={
quickContact ? "form_success_message_quick" :
"form_success_message"
}
hidden
>
<a className="uk-alert-close" data-uk-close></a>
<p>
Thank you for contacting us. We will get in touch with you
shortly.
</p>
</div>
<div
className="uk-alert-primary contact-form-error-quick"
data-uk-alert
id={quickContact ? "form_error_message_quick" : "form_error_message"}
hidden>
<a className="uk-alert-close" data-uk-close></a>
<p>
Thank you for contacting us. We will get in touch with you shortly.
</p>
</div>
<div
className={`uk-grid ${
small || quickContact ? "uk-grid-small" : "uk-grid-medium"
}`}
>
<div className={quickContact ? "uk-width-1-3@s" : "uk-width-1-2@s"}>
<InputField
label="Name *"
value={name}
setValue={setName}
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
<div className={quickContact ? "uk-width-1-3@s" : "uk-width-1-2@s"}>
<InputField
label="Email *"
value={email}
setValue={setEmail}
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
{quickContact && (
<div className="uk-width-1-3@s">
<InputField
label="Website"
value={website}
setValue={setWebsite}
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
)}
{!quickContact && (
<div className="uk-width-1-2@s">
<InputField
label="Phone number *"
value={phone}
setValue={setPhone}
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
)}
{!quickContact && (
<div className="uk-width-1-2@s">
<InputField
label="Website"
value={website}
setValue={setWebsite}
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
)}
<div className="uk-width-1-1">
<InputField
label="Message *"
value={message}
setValue={setMessage}
textArea
noLabels={noLabels}
margin={margin}
small={small}
/>
</div>
<div className="uk-width-1-1 uk-text-center">
<button
type="submit"
className={`uk-button ${blueButton ? "blue" : "purple"}`}
value="Submit"
name="submit"
>
{buttonLabel ? buttonLabel : "Submit"}
</button>
</div>
</div>
</form>
)
}
const InputField = ({
noLabels,
value,
setValue,
label,
textArea = false,
margin,
small,
}) => {
<>
{textArea ? (
<textarea
placeholder={label}
className={`uk-textarea custom-margin-${
margin ? margin + "-" : ""
}bottom ${!small && "uk-form-large"}`}
cols="30"
rows="6"
required
value={value}
onChange={e => setValue(e.target.value)}
></textarea>
) : (
<input
type="text"
className={`uk-input custom-margin-${
margin ? margin + "-" : ""
}bottom ${!small && "uk-form-large"}`}
placeholder={label}
required
value={value}
onChange={e => setValue(e.target.value)}
/>
)}
</>
如果可能,我想使用“e.target.reset()”重置此代码。 此外,如何使用“setValue”的方法也会很有帮助。
【问题讨论】:
-
您是否尝试过使用“初始”状态值调用“setState”/“状态更新函数”?
-
@DrewReese 不,请你再多一点。
-
提交处理程序中的
setValue('')之类的东西。如果您可以提供更完整的组件示例,我可能会制定解决方案。 -
@DrewReese 哦,是的,我会.. 请在问题中再次检查我的代码。非常感谢
-
@DrewReese 请帮帮忙..我现在真的需要帮助才能完成这个..我只需要在点击提交后使用此代码重置输入
标签: reactjs forms gatsby reset submit-button