सामग्री पर जाएँ
सभी गाइड

गाइड

Gatsby कॉन्टैक्ट फ़ॉर्म (कोई बैकएंड नहीं चाहिए)

Gatsby स्थिर HTML बिल्ड करता है, इसलिए Gatsby कॉन्टैक्ट फ़ॉर्म रनटाइम पर बस सादा HTML है। फ़ॉर्म action को डालें, या यदि आप इनलाइन सफलता और त्रुटि अवस्थाएँ चाहते हैं तो fetch के साथ एक छोटे React कंपोनेंट का उपयोग करें।

सादा HTML फ़ॉर्म उपयोग करें

आपको API रूट की ज़रूरत नहीं है। फ़ॉर्म सीधे Formhook को POST करता है, और आपके फ़्रेमवर्क को सबमिशन छूना ही नहीं पड़ता।

contact.html
<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>

या Gatsby में fetch से सबमिट करें

इस संस्करण का उपयोग करें यदि आप पूर्ण पेज रीलोड के बिना क्लाइंट-साइड सफलता/त्रुटि अवस्थाएँ चाहते हैं।

src/components/contact-form.tsx
// src/components/contact-form.tsx
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>
  );
}

यह कैसे काम करता है

सादा फ़ॉर्म स्निपेट किसी भी Gatsby पेज या कंपोनेंट में जा सकता है - यह शुद्ध HTML है, Gatsby-विशिष्ट डेटा परत की आवश्यकता नहीं। fetch-आधारित React कंपोनेंट क्लाइंट-साइड सबमिशन संभालता है और formhook.app/f/YOUR_API_KEY को पोस्ट करता है। इंस्टॉल करने के लिए कोई gatsby-source-formhook प्लगइन नहीं, डिप्लॉय करने के लिए कोई सर्वरलेस function नहीं।

आगे क्या होता है

  • सबमिशन एक सेकंड के भीतर आपके Formhook डैशबोर्ड में आता है।
  • हर सक्षम डिवाइस पर पुश सूचना बजती है।
  • डैशबोर्ड से सीधे उत्तर दें (Pro और इससे ऊपर) - आपके Gatsby साइट के स्थिर HTML से आपका वास्तविक ईमेल बाहर रखता है।

आज ही अपना Gatsby कॉन्टैक्ट फ़ॉर्म लॉन्च करें।

मुफ़्त साइन अप करें, फ़ॉर्म बनाएँ, API कुंजी पेस्ट करें। पाँच मिनट।

मुफ़्त में शुरू करें

मुफ़्त स्तर: 5 फ़ॉर्म · 250 सबमिशन/माह · क्रेडिट कार्ड नहीं चाहिए।

Gatsby कॉन्टैक्ट फ़ॉर्म - FAQ

क्या मुझे इसके लिए Gatsby Function या Netlify function चाहिए?
नहीं। फ़ॉर्म सीधे Formhook को POST करता है। आपकी Gatsby साइट शुद्ध स्थिर बिल्ड रह सकती है - कोई सर्वरलेस function एडैप्टर आवश्यक नहीं।
क्या मैं इसे स्थानीय रूप से `gatsby develop` के साथ उपयोग कर सकता हूँ?
हाँ। ब्राउज़र POST करता है चाहे Gatsby ने HTML कैसे भी सर्व किया हो। बस सुनिश्चित करें कि http://localhost:8000 विकास के दौरान फ़ॉर्म की अनुमत मूल सूची में है।
Gatsby प्लगइन जोड़े बिना स्पैम कैसे संभालूँ?
आपको ज़रूरत नहीं है। हनीपॉट फ़ील्ड चुपचाप बॉट्स गिराता है, और Cloudflare Turnstile Formhook डैशबोर्ड में प्रति-फ़ॉर्म टॉगल है।

अन्य फ़्रेमवर्क के लिए गाइड

Migrating from Formspree? See how Formhook compares.