प्रतिक्रिया संपर्क फॉर्म एकत्रीकरण (विट आणि सिंगल-पेज ॲप्स)
हनीपॉट स्पॅम डिफेन्स आणि इन्स्टंट इनबॉक्स नोटिफिकेशन्स असलेल्या Vite किंवा Create React ॲपसह तयार केलेल्या React सिंगल-पेज ॲप्लिकेशन्स (SPA) मध्ये संपर्क आणि फीडबॅक फॉर्म कसे जोडायचे.
1. Vite सह मानक प्रतिक्रिया संपर्क फॉर्म घटक
हा लाइटवेट रिएक्ट घटक तुमच्या लुगाटू पब्लिक एंडपॉइंटवर थेट सबमिट करण्यासाठी स्टँडर्ड रिएक्ट हुक (यूजस्टेट) आणि ब्राउझर फेच API वापरतो. कोणत्याही बाह्य फॉर्म लायब्ररी किंवा बॅकएंड सर्व्हरची आवश्यकता नाही.
import React, { useState } from 'react';
export function ContactForm() {
const [formData, setFormData] = useState({ name: '', email: '', message: '', _gotcha: '' });
const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle');
const [errorMessage, setErrorMessage] = useState('');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (formData._gotcha) return; // Silent discard for automated bot traps
setStatus('submitting');
setErrorMessage('');
try {
const response = await fetch('https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify({
fields: {
name: formData.name,
email: formData.email,
message: formData.message,
},
honeypot: formData._gotcha,
}),
});
if (!response.ok) {
throw new Error('Failed to deliver message');
}
setStatus('success');
setFormData({ name: '', email: '', message: '', _gotcha: '' });
} catch (err: any) {
setStatus('error');
setErrorMessage(err.message || 'Submission error. Please try again.');
}
};
return (
<form onSubmit={handleSubmit} className="space-y-4 max-w-md">
<div>
<label htmlFor="react-name" className="block text-sm font-semibold mb-1">Your Name</label>
<input
id="react-name"
type="text"
required
value={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
className="w-full border rounded-xl p-2.5"
/>
</div>
<div>
<label htmlFor="react-email" className="block text-sm font-semibold mb-1">Email Address</label>
<input
id="react-email"
type="email"
required
value={formData.email}
onChange={(e) => setFormData({ ...formData, email: e.target.value })}
className="w-full border rounded-xl p-2.5"
/>
</div>
<div>
<label htmlFor="react-message" className="block text-sm font-semibold mb-1">Message</label>
<textarea
id="react-message"
rows={4}
required
value={formData.message}
onChange={(e) => setFormData({ ...formData, message: e.target.value })}
className="w-full border rounded-xl p-2.5"
/>
</div>
<!-- Honeypot spam defense -->
<input
type="text"
name="_gotcha"
value={formData._gotcha}
onChange={(e) => setFormData({ ...formData, _gotcha: e.target.value })}
style={{ display: 'none' }}
tabIndex={-1}
autoComplete="off"
/>
<button
type="submit"
disabled={status === 'submitting'}
className="btn-primary-editorial py-2.5 px-6"
>
{status === 'submitting' ? 'Sending...' : 'Send Message'}
</button>
{status === 'success' && (
<p className="text-sm text-green-700 font-medium">Thank you! Your message was delivered.</p>
)}
{status === 'error' && (
<p className="text-sm text-red-600">{errorMessage}</p>
)}
</form>
);
}
2. प्रतिक्रिया हुक फॉर्म आणि फॉर्मिकसह एकत्रीकरण
Lugatu मानक JSON सबमिशन मॉडेल रिऍक्ट हुक फॉर्म, फॉर्मिक किंवा झोड सारख्या फॉर्म प्रमाणीकरण लायब्ररीसह सहजतेने एकत्रित होते. अनुक्रमित मूल्ये थेट फील्ड पेलोड ऑब्जेक्टमध्ये पास करा.
// React Hook Form submission handler
const onSubmit = async (data: FormValues) => {
const res = await fetch(`https://www.lugatu.com/api/v1/public/forms/${import.meta.env.VITE_LUGATU_FORM_ID}/submissions`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ fields: data }),
});
return res.ok;
};
3. प्रतिक्रिया मध्ये पर्यावरण परिवर्तने आणि गुप्त पृथक्करण
Vite मध्ये, सार्वजनिक व्हेरिएबल्स VITE_ सह उपसर्ग लावले जातात. सार्वजनिक फॉर्म ID साठी VITE_LUGATU_FORM_ID वापरा. तुमची सर्व्हर-टू-सर्व्हर API की (lug_live_...) क्लायंट-साइड सोर्स कोड किंवा रेपॉजिटरीजमध्ये कधीही उघड करू नका.
lug_live_ ने सुरू होणाऱ्या लाइव्ह API की सर्व्हर-टू-सर्व्हर अंमलबजावणीसाठी काटेकोरपणे आरक्षित आहेत. लाइव्ह API की सह पाठवलेली कोणतीही ब्राउझर विनंती HTTP 403 सह नाकारली जाते.
सुरक्षा आणि प्रमाणीकरण अपरिवर्तनीय
सुरक्षा अपरिवर्तनीय: VITE_ किंवा REACT_APP_ सह लाइव्ह API की कधीही उपसर्ग करू नका. ब्राउझर क्लायंटने केवळ API की शिवाय सार्वजनिक एंडपॉइंट्सवर सबमिट करणे आवश्यक आहे.
समस्यानिवारण आणि सामान्य अंतर्ग्रहण त्रुटी
तुम्ही सार्वजनिक एंडपॉइंट (https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions) वर सबमिट करत आहात याची खात्री करा. सर्व्हर-टू-सर्व्हर एंडपॉइंट्स (POST /api/v1/forms/{id}/submissions) स्पष्टपणे ब्राउझर मूळ अवरोधित करतात.
वारंवार विचारले जाणारे प्रश्न
मी लुगाटू बरोबर रिॲक्ट हुक फॉर्म किंवा फॉर्मिक वापरू शकतो का?
होय. Lugatu फील्ड ऑब्जेक्टसह मानक JSON स्वीकारतो. कोणतीही प्रतिक्रिया फॉर्म लायब्ररी त्याची मूल्ये अनुक्रमित करू शकते आणि सार्वजनिक एंडपॉइंटवर सबमिट करू शकते.
तुमचा फॉर्म एंडपॉइंट तयार करण्यास तयार आहात?
काही सेकंदात विनामूल्य प्रारंभ करा. क्रेडिट कार्ड आवश्यक नाही.