Anleitung
Gatsby-Kontaktformular (kein Backend nötig)
Gatsby baut statisches HTML, also ist ein Gatsby-Kontaktformular zur Laufzeit einfach HTML. Fügen Sie das form-action ein oder verwenden Sie eine kleine React-Komponente mit fetch, wenn Sie Inline-Erfolgs- und Fehlerzustände wollen.
Verwenden Sie ein einfaches HTML-Formular
Sie benötigen keine API-Route. Das Formular sendet direkt an Formhook, und Ihr Framework muss die Einsendung nie selbst verarbeiten.
<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>Oder mit fetch in Gatsby senden
Verwenden Sie diese Variante, wenn Sie client-seitige Erfolgs-/Fehlerzustände ohne vollständigen Seiten-Reload möchten.
// 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>
);
}So funktioniert es
Das einfache Formular-Snippet kann in jede Gatsby-Seite oder -Komponente eingebaut werden - es ist reines HTML, kein Gatsby-spezifischer Daten-Layer nötig. Die fetch-basierte React-Komponente behandelt die Einsendung clientseitig und sendet an formhook.app/f/YOUR_API_KEY. Kein gatsby-source-formhook-Plugin zu installieren, keine Serverless-Function zu deployen.
Was als Nächstes passiert
- Einsendung landet innerhalb einer Sekunde in Ihrem Formhook-Dashboard.
- Push-Benachrichtigung wird auf allen aktivierten Geräten ausgelöst.
- Antworten Sie direkt aus dem Dashboard (Pro und höher) - hält Ihre echte E-Mail aus dem statischen HTML Ihrer Gatsby-Seite heraus.
Veröffentlichen Sie heute Ihr Gatsby-Kontaktformular.
Kostenlos registrieren, Formular erstellen, API-Schlüssel einfügen. Fünf Minuten.
Kostenlos startenKostenlose Stufe: 5 Formulare · 250 Einsendungen/Monat · Keine Kreditkarte.
Gatsby-Kontaktformular - FAQ
- Brauche ich eine Gatsby-Function oder eine Netlify-Function dafür?
- Nein. Das Formular sendet direkt an Formhook. Ihre Gatsby-Seite kann ein reiner statischer Build bleiben - kein Serverless-Function-Adapter erforderlich.
- Kann ich das mit `gatsby develop` lokal verwenden?
- Ja. Der Browser macht den POST unabhängig davon, wie Gatsby das HTML ausgeliefert hat. Achten Sie nur darauf, dass http://localhost:8000 in der Allowed-Origins-Liste des Formulars steht, während Sie entwickeln.
- Wie behandle ich Spam, ohne ein Gatsby-Plugin hinzuzufügen?
- Müssen Sie nicht. Das Honeypot-Feld verwirft Bots stillschweigend, und Cloudflare Turnstile ist ein Schalter pro Formular im Formhook-Dashboard.
Anleitungen für andere Frameworks
Migrating from Formspree? See how Formhook compares.