गाइड
Next.js कॉन्टैक्ट फ़ॉर्म (कोई बैकएंड नहीं चाहिए)
Next.js को अपना फ़ॉर्म रिसीवर नहीं चाहिए। आप उसी सादे HTML फ़ॉर्म action को किसी भी Server Component में डाल सकते हैं, या - यदि आप क्लाइंट-साइड सफलता और त्रुटि अवस्थाएँ चाहते हैं - fetch के साथ एक छोटे Client Component का उपयोग कर सकते हैं। दोनों सीधे Formhook को POST करते हैं।
सादा HTML फ़ॉर्म उपयोग करें
आपको API रूट की ज़रूरत नहीं है। फ़ॉर्म सीधे Formhook को POST करता है, और आपके फ़्रेमवर्क को सबमिशन छूना ही नहीं पड़ता।
<form action="https://formhook.app/f/YOUR_API_KEY" method="POST">
<label>
Email
<input type="email" name="email" required />
</label>
<label>
Message
<textarea name="message" required></textarea>
</label>
<!-- honeypot: bots fill this; humans don't see it -->
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off" hidden />
<!-- optional: send users to a thank-you page after a native POST -->
<input type="hidden" name="_redirect" value="https://example.com/thanks" />
<button type="submit">Send</button>
</form>या Next.js में fetch से सबमिट करें
इस संस्करण का उपयोग करें यदि आप पूर्ण पेज रीलोड के बिना क्लाइंट-साइड सफलता/त्रुटि अवस्थाएँ चाहते हैं।
"use client";
import { useState } from "react";
export function ContactForm() {
const [status, setStatus] = useState<"idle" | "sending" | "ok" | "error">("idle");
async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
setStatus("sending");
const form = e.currentTarget;
const data = Object.fromEntries(new FormData(form));
const res = await fetch("https://formhook.app/f/YOUR_API_KEY", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
setStatus(res.ok ? "ok" : "error");
if (res.ok) form.reset();
}
if (status === "ok") return <p>Thanks - we'll be in touch.</p>;
return (
<form onSubmit={onSubmit}>
<input type="email" name="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required />
<input type="text" name="_gotcha" tabIndex={-1} hidden />
<button type="submit" disabled={status === "sending"}>
{status === "sending" ? "Sending…" : "Send"}
</button>
{status === "error" && <p>Something went wrong. Please try again.</p>}
</form>
);
}यह कैसे काम करता है
सादा फ़ॉर्म action किसी भी Next.js पेज या लेआउट में काम करता है, Server Components सहित। कोई app/api/contact/route.ts नहीं, कोई Server Action नहीं, कोई middleware नहीं। यदि आप सफलता और त्रुटि अवस्थाओं के साथ क्लाइंट-साइड UX चाहते हैं, तो दूसरा स्निपेट विहित पैटर्न दिखाता है: "use client", useState, onSubmit, formhook.app/f/YOUR_API_KEY को fetch। हनीपॉट (_gotcha) और वैकल्पिक _redirect HTML गाइड के समान विशेष फ़ील्ड हैं।
आगे क्या होता है
- सबमिशन एक सेकंड के भीतर आपके Formhook डैशबोर्ड में दिखाई देता है।
- हर सक्षम डिवाइस पर पुश सूचना बजती है।
- डैशबोर्ड से सीधे उत्तर दें (Pro और इससे ऊपर) - क्लाइंट वर्क के लिए उपयोगी जहाँ हर प्रोजेक्ट का अपना कॉन्टैक्ट रूट होता है।
आज ही अपना Next.js कॉन्टैक्ट फ़ॉर्म लॉन्च करें।
मुफ़्त साइन अप करें, फ़ॉर्म बनाएँ, API कुंजी पेस्ट करें। पाँच मिनट।
मुफ़्त में शुरू करेंमुफ़्त स्तर: 5 फ़ॉर्म · 250 सबमिशन/माह · क्रेडिट कार्ड नहीं चाहिए।
Next.js कॉन्टैक्ट फ़ॉर्म - FAQ
- क्या मुझे API रूट या Server Action जोड़ने की आवश्यकता है?
- नहीं। फ़ॉर्म सीधे Formhook को POST करता है। API रूट छोड़ने का अर्थ है रेट-लिमिट के लिए एक कम सतह, और सर्वरलेस डिप्लॉयमेंट पर एक कम कोल्ड स्टार्ट।
- क्या मैं इसे Server Component में उपयोग कर सकता हूँ?
- हाँ - सादा HTML फ़ॉर्म स्निपेट किसी भी Server Component में काम करता है। केवल fetch-आधारित संस्करण को Client Component होने की आवश्यकता है, क्योंकि यह useState का उपयोग करता है।
- रेट-लिमिट मिडलवेयर लिखे बिना स्पैम कैसे संभालूँ?
- स्पैम सुरक्षा Formhook की तरफ है। हनीपॉट चुपचाप बॉट्स गिराता है, और Cloudflare Turnstile डैशबोर्ड में प्रति-फ़ॉर्म टॉगल है। प्रति-IP और प्रति-फ़ॉर्म रेट लिमिट भी सर्वर-साइड लागू होती हैं।
अन्य फ़्रेमवर्क के लिए गाइड
Migrating from Formspree? See how Formhook compares.