ری ایکٹ رابطہ فارم انٹیگریشن (وائٹ اور سنگل پیج ایپس)
وائٹ یا تخلیق ری ایکٹ ایپ کے ساتھ بنائی گئی ری ایکٹ سنگل پیج ایپلیکیشنز (SPA) میں رابطہ اور فیڈ بیک فارمز کیسے شامل کیے جائیں، جس میں ہنی پاٹ اسپام ڈیفنس اور فوری ان باکس اطلاعات شامل ہوں۔
1. وائٹ کے ساتھ معیاری رد عمل کا رابطہ فارم کا جزو
یہ ہلکا پھلکا React جزو معیاری React ہکس (useState) اور براؤزر Fetch API کو براہ راست آپ کے Lugatu پبلک اینڈ پوائنٹ پر جمع کرانے کے لیے استعمال کرتا ہے۔ بیرونی فارم لائبریریوں یا بیک اینڈ سرورز کی ضرورت نہیں ہے۔
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، Formik، یا Zod کے ساتھ آسانی سے ضم ہوجاتا ہے۔ سیریلائزڈ اقدار کو براہ راست فیلڈز پے لوڈ آبجیکٹ میں منتقل کریں۔
// 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 کے ساتھ مسترد کر دی جاتی ہے۔
سیکورٹی اور توثیق انویرینٹ
سیکیورٹی انویریئنٹ: کبھی بھی لائیو API کیز کو VITE_ یا REACT_APP_ کے ساتھ نہ لگائیں۔ براؤزر کلائنٹس کو خصوصی طور پر API کیز کے بغیر پبلک اینڈ پوائنٹس پر جمع کرانا چاہیے۔
ٹربل شوٹنگ اور عام ادخال کی خرابیاں
یقینی بنائیں کہ آپ پبلک اینڈ پوائنٹ (https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions) پر جمع کر رہے ہیں۔ سرور سے سرور کے اختتامی پوائنٹس (POST /api/v1/forms/{id}/submissions) واضح طور پر براؤزر کی اصلیت کو مسدود کرتے ہیں۔
اکثر پوچھے گئے سوالات
کیا میں Lugatu کے ساتھ React Hook Form یا Formik استعمال کر سکتا ہوں؟
جی ہاں Lugatu ایک فیلڈ آبجیکٹ کے ساتھ معیاری JSON کو قبول کرتا ہے۔ کوئی بھی React فارم لائبریری اپنی اقدار کو سیریلائز کر سکتی ہے اور پبلک اینڈ پوائنٹ پر جمع کر سکتی ہے۔
اپنا فارم اینڈ پوائنٹ بنانے کے لیے تیار ہیں؟
سیکنڈوں میں مفت شروع کریں۔ کریڈٹ کارڈ کی ضرورت نہیں ہے۔