Skip to content

Instantly share code, notes, and snippets.

@gigincg
Created August 29, 2024 06:46
Show Gist options
  • Select an option

  • Save gigincg/ed7e77e332ed3d647182853a3184b0d4 to your computer and use it in GitHub Desktop.

Select an option

Save gigincg/ed7e77e332ed3d647182853a3184b0d4 to your computer and use it in GitHub Desktop.
React Contact Form for Cloudflare Worker
import React, { useState } from "react";
const ContactForm = () => {
const [formData, setFormData] = useState({
name: "",
eml: "",
message: "",
eml2: "", // Honeypot field, should be hidden
});
const [responseMessage, setResponseMessage] = useState("");
const handleChange = (e) => {
const { name, value } = e.target;
setFormData({
...formData,
[name]: value,
});
};
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await fetch("https://hoverspaces-contact.ohc.workers.dev", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
});
const result = await response.json();
setResponseMessage(result.message);
} catch (error) {
setResponseMessage("Something went wrong. Please try again later.");
}
};
return (
<div>
<form onSubmit={handleSubmit}>
<div>
<label>Name:</label>
<input
type="text"
name="name"
value={formData.name}
onChange={handleChange}
required
/>
</div>
<div>
<label>Email:</label>
<input
type="email"
name="eml"
value={formData.eml}
onChange={handleChange}
required
/>
</div>
<div style={{ display: "none" }}>
<label>Leave this field empty:</label>
<input
type="text"
name="eml2"
value={formData.eml2}
onChange={handleChange}
/>
</div>
<div>
<label>Message:</label>
<textarea
name="message"
value={formData.message}
onChange={handleChange}
required
/>
</div>
<button type="submit">Send</button>
</form>
{responseMessage && <p>{responseMessage}</p>}
</div>
);
};
export default ContactForm;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment