Guide
Formulaire de contact Gatsby (sans backend)
Gatsby compile en HTML statique, donc un formulaire de contact Gatsby est juste du HTML brut à l'exécution. Déposez le form action, ou utilisez un petit composant React avec fetch si vous voulez des états succès et erreur inline.
Utilisez un formulaire HTML brut
Vous n'avez pas besoin d'une route API. Le formulaire POSTe directement vers Formhook, et votre framework n'a jamais à toucher la soumission.
<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>Ou envoyez avec fetch dans Gatsby
Utilisez cette version si vous voulez des états succès/erreur côté client sans rechargement de page.
// 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>
);
}Comment ça marche
Le snippet de formulaire brut peut aller dans n'importe quelle page ou composant Gatsby - c'est du HTML pur, pas besoin de couche de données spécifique à Gatsby. Le composant React basé sur fetch gère la soumission côté client et poste vers formhook.app/f/YOUR_API_KEY. Pas de plugin gatsby-source-formhook à installer, pas de fonction serverless à déployer.
Ce qui se passe ensuite
- La soumission arrive dans votre tableau de bord Formhook en moins d'une seconde.
- Une notification push se déclenche sur chaque appareil où vous l'avez activée.
- Répondez directement depuis le tableau de bord (Pro et au-dessus) - garde votre vraie e-mail hors du HTML statique de votre site Gatsby.
Lancez votre formulaire de contact Gatsby aujourd'hui.
Inscrivez-vous gratuitement, créez un formulaire, collez la clé API. Cinq minutes.
Commencer gratuitementNiveau gratuit : 5 formulaires · 250 soumissions/mois · Sans carte bancaire.
Formulaire de contact Gatsby - FAQ
- Ai-je besoin d'une Gatsby Function ou d'une fonction Netlify pour ceci ?
- Non. Le formulaire POSTe directement vers Formhook. Votre site Gatsby peut rester un build statique pur - pas d'adaptateur de fonction serverless requis.
- Puis-je utiliser ceci avec `gatsby develop` localement ?
- Oui. Le navigateur fait le POST quelle que soit la façon dont Gatsby a servi le HTML. Assurez-vous juste que http://localhost:8000 figure dans la liste des origines autorisées du formulaire pendant le développement.
- Comment gérer le spam sans ajouter de plugin Gatsby ?
- Vous n'avez pas besoin. Le champ honeypot élimine les bots silencieusement, et Cloudflare Turnstile est un commutateur par formulaire dans le tableau de bord Formhook.
Guides pour les autres frameworks
Migrating from Formspree? See how Formhook compares.