Home / வழிகாட்டிகள் / எதிர்வினை தொடர்பு படிவ ஒருங்கிணைப்பு (வைட் & ஒற்றைப் பக்க ஆப்ஸ்)
ஒருங்கிணைப்பு வழிகாட்டி · ரியாக்ட் & ஸ்பா

எதிர்வினை தொடர்பு படிவ ஒருங்கிணைப்பு (வைட் & ஒற்றைப் பக்க ஆப்ஸ்)

ஹனிபாட் ஸ்பேம் பாதுகாப்பு மற்றும் உடனடி இன்பாக்ஸ் அறிவிப்புகளைக் கொண்ட வைட் அல்லது கிரியேட் ஆப் மூலம் உருவாக்கப்பட்ட ரியாக்ட் சிங்கிள்-பேஜ் அப்ளிகேஷன்களுக்கு (எஸ்பிஏ) தொடர்பு மற்றும் கருத்துப் படிவங்களை எவ்வாறு சேர்ப்பது.

1. Vite உடன் நிலையான ரியாக்ட் தொடர்பு படிவ கூறு

இந்த இலகுரக ரியாக்ட் கூறு, நிலையான ரியாக்ட் ஹூக்குகள் (யூஸ்ஸ்டேட்) மற்றும் ஃபெட்ச் ஏபிஐ உலாவியைப் பயன்படுத்தி உங்கள் லுகாட்டு பொது இறுதிப் புள்ளியில் நேரடியாகச் சமர்ப்பிக்கிறது. வெளிப்புற படிவ நூலகங்கள் அல்லது பின்தள சேவையகங்கள் தேவையில்லை.

src/components/ContactForm.tsx tsx
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 சமர்ப்பிப்பு மாதிரியானது ரியாக்ட் ஹூக் படிவம், ஃபார்மிக் அல்லது சோட் போன்ற படிவ சரிபார்ப்பு நூலகங்களுடன் சிரமமின்றி ஒருங்கிணைக்கிறது. வரிசைப்படுத்தப்பட்ட மதிப்புகளை நேரடியாக புலங்களின் பேலோட் பொருளில் அனுப்பவும்.

useLugatuForm.ts typescript
// 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_ உடன் முன்னொட்டாக இருக்கும். பொது படிவ ஐடிக்கு VITE_LUGATU_FORM_ID ஐப் பயன்படுத்தவும். உங்கள் சேவையகத்திலிருந்து சேவையகத்திற்கு API விசையை (lug_live_...) கிளையன்ட் பக்க மூலக் குறியீடு அல்லது களஞ்சியங்களுக்குள் ஒருபோதும் வெளிப்படுத்த வேண்டாம்.

warning

lug_live_ இல் தொடங்கும் லைவ் API விசைகள் சர்வரில் இருந்து சர்வர் செயல்படுத்துவதற்கு கண்டிப்பாக ஒதுக்கப்பட்டுள்ளன. நேரடி API விசையுடன் அனுப்பப்படும் எந்த உலாவி கோரிக்கையும் HTTP 403 உடன் நிராகரிக்கப்படும்.

பாதுகாப்பு மற்றும் அங்கீகாரம் மாறாதது

பாதுகாப்பு மாறாதது: நேரடி API விசைகளை VITE_ அல்லது REACT_APP_ உடன் முன்னொட்டு வைக்க வேண்டாம். உலாவி கிளையண்டுகள் API விசைகள் இல்லாமல் பொது இறுதிப்புள்ளிகளுக்கு பிரத்தியேகமாக சமர்ப்பிக்க வேண்டும்.

சரிசெய்தல் & பொதுவான உட்செலுத்துதல் பிழைகள்

படிவம் சமர்ப்பிப்புகள் உலாவி கன்சோலில் CORS பிழையை வழங்கும்

நீங்கள் பொது இறுதிப் புள்ளியில் (https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions) சமர்ப்பிக்கிறீர்கள் என்பதை உறுதிப்படுத்தவும். சர்வர்-டு-சர்வர் எண்ட்பாயிண்ட்ஸ் (POST /api/v1/forms/{id}/submissions) உலாவியின் தோற்றத்தை வெளிப்படையாகத் தடுக்கின்றன.

அடிக்கடி கேட்கப்படும் கேள்விகள்

நான் Lugatu உடன் React Hook Form அல்லது Formik ஐப் பயன்படுத்தலாமா?

ஆம். புலங்கள் பொருளுடன் நிலையான JSONஐ Lugatu ஏற்றுக்கொள்கிறது. எந்த ரியாக்ட் படிவ நூலகமும் அதன் மதிப்புகளை வரிசைப்படுத்தி பொது இறுதிப் புள்ளியில் சமர்ப்பிக்கலாம்.

உங்கள் படிவத்தின் இறுதிப்புள்ளியை உருவாக்கத் தயாரா?

நொடிகளில் இலவசமாகத் தொடங்குங்கள். கடன் அட்டை தேவையில்லை.

இலவசமாக தொடங்கவும் →