M
MLOG
2025, സെപ്റ്റംബർ 7മലയാളം

റിയാക്റ്റിന്റെ experimental_useFormStatus ഹുക്ക് ഉപയോഗിച്ച് ശക്തമായ ഫോം എറർ കൈകാര്യം ചെയ്യൽ, സബ്മിഷൻ ട്രാക്കിംഗ്, മെച്ചപ്പെട്ട ഉപയോക്തൃ അനുഭവം എന്നിവയെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള പഠനം. മികച്ചതും ഉപയോക്തൃ-സൗഹൃദവുമായ ഫോമുകൾ നിർമ്മിക്കാൻ പഠിക്കുക.

റിയാക്റ്റ് experimental_useFormStatus: ഫോം എറർ സ്റ്റാറ്റസ് ട്രാക്കിംഗിൽ വൈദഗ്ദ്ധ്യം നേടാം

റിയാക്റ്റിന്റെ എപ്പോഴും വികസിച്ചുകൊണ്ടിരിക്കുന്ന ലോകം, ഡെവലപ്‌മെന്റ് ലളിതമാക്കാനും ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്താനും ലക്ഷ്യമിട്ടുള്ള ഫീച്ചറുകൾ തുടർച്ചയായി അവതരിപ്പിക്കുന്നു. അത്തരത്തിലുള്ള ഒരു പുതിയ കൂട്ടിച്ചേർക്കലാണ് experimental_useFormStatus ഹുക്ക്, ഇത് ഇപ്പോൾ പരീക്ഷണ ഘട്ടത്തിലാണ്. നിങ്ങളുടെ റിയാക്റ്റ് കമ്പോണന്റുകൾക്കുള്ളിൽ നേരിട്ട് ഫോം സമർപ്പണങ്ങളുടെ നില, പിശകുകൾ ഉൾപ്പെടെ, ട്രാക്ക് ചെയ്യുന്നതിനുള്ള ഒരു കാര്യക്ഷമമായ മാർഗ്ഗം ഈ ശക്തമായ ടൂൾ നൽകുന്നു. മികച്ചതും ഉപയോക്തൃ-സൗഹൃദവുമായ ഫോമുകൾ നിർമ്മിക്കുന്നതിന് experimental_useFormStatus മനസ്സിലാക്കുന്നതിനും ഫലപ്രദമായി ഉപയോഗിക്കുന്നതിനുമുള്ള ഒരു സമഗ്രമായ വഴികാട്ടിയാണ് ഈ ബ്ലോഗ് പോസ്റ്റ്.

experimental_useFormStatus-ന്റെ ആവശ്യകത മനസ്സിലാക്കാം

പരമ്പരാഗതമായി, റിയാക്റ്റിൽ ഫോം സമർപ്പണങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിന് ധാരാളം ബോയിലർപ്ലേറ്റ് കോഡുകൾ ആവശ്യമായിരുന്നു. ഡെവലപ്പർമാർക്ക് സമർപ്പണത്തിന്റെ അവസ്ഥകൾ (പെൻഡിംഗ്, സക്സസ്, എറർ) സ്വമേധയാ ട്രാക്ക് ചെയ്യേണ്ടി വന്നിരുന്നു, പിശക് സന്ദേശങ്ങൾ കൈകാര്യം ചെയ്യുകയും അതിനനുസരിച്ച് UI അപ്‌ഡേറ്റ് ചെയ്യുകയും ചെയ്യേണ്ടിയിരുന്നു. ഇത് സങ്കീർണ്ണവും പിശകുകൾക്ക് സാധ്യതയുള്ളതുമായ കോഡിലേക്ക് നയിച്ചേക്കാം, പ്രത്യേകിച്ചും ഒന്നിലധികം വാലിഡേഷൻ നിയമങ്ങളും അസിൻക്രണസ് പ്രവർത്തനങ്ങളുമുള്ള സങ്കീർണ്ണമായ ഫോമുകളിൽ.

experimental_useFormStatus ഈ വെല്ലുവിളിയെ അഭിമുഖീകരിക്കുന്നത് ഫോം സമർപ്പണ നില കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഒരു കേന്ദ്രീകൃതവും ഡിക്ലറേറ്റീവുമായ മാർഗ്ഗം നൽകിക്കൊണ്ടാണ്. ഇത് പിശകുകൾ ട്രാക്ക് ചെയ്യുന്നതിനും ലോഡിംഗ് അവസ്ഥകൾ സൂചിപ്പിക്കുന്നതിനും ഉപയോക്താവിന് ഫീഡ്‌ബാക്ക് നൽകുന്നതിനും ഉള്ള പ്രക്രിയ ലളിതമാക്കുന്നു, ഇത് വൃത്തിയുള്ളതും പരിപാലിക്കാൻ എളുപ്പമുള്ളതും കൂടുതൽ മികച്ച പ്രകടനമുള്ളതുമായ കോഡിന് കാരണമാകുന്നു.

എന്താണ് experimental_useFormStatus?

experimental_useFormStatus ഹുക്ക് ഒരു ഫോം സമർപ്പണത്തിന്റെ സ്റ്റാറ്റസിനെക്കുറിച്ചുള്ള വിവരങ്ങൾ നൽകാൻ പ്രത്യേകം രൂപകൽപ്പന ചെയ്ത ഒരു റിയാക്റ്റ് ഹുക്ക് ആണ്. ഇത് <form> എലമെന്റിന്റെ action ആട്രിബ്യൂട്ടും സെർവർ ആക്ഷനുകളുമായി (മറ്റൊരു പുതിയ റിയാക്റ്റ് ഫീച്ചർ) ചേർന്നാണ് പ്രവർത്തിക്കുന്നത്. ഒരു സെർവർ ആക്ഷനിലേക്ക് പോയിന്റ് ചെയ്യുന്ന action ഉള്ള ഒരു ഫോം സമർപ്പിക്കുമ്പോൾ, experimental_useFormStatus ആ സമർപ്പണത്തിന്റെ നിലവിലെ അവസ്ഥയെക്കുറിച്ചുള്ള ഡാറ്റ നൽകുന്നു.

പ്രത്യേകമായി, ഈ ഹുക്ക് താഴെ പറയുന്ന പ്രോപ്പർട്ടികൾ അടങ്ങുന്ന ഒരു ഒബ്ജക്റ്റ് നൽകുന്നു:

  • pending: ഫോം സമർപ്പണം നിലവിൽ പുരോഗമിക്കുകയാണോ എന്ന് സൂചിപ്പിക്കുന്ന ഒരു ബൂളിയൻ മൂല്യം.
  • data: ഫോം സമർപ്പിച്ച ഡാറ്റ.
  • method: ഫോം സമർപ്പണത്തിനായി ഉപയോഗിച്ച HTTP മെത്തേഡ് (ഉദാഹരണത്തിന്, "POST", "GET").
  • action: ഫോം സമർപ്പണത്തിലൂടെ ട്രിഗർ ചെയ്യപ്പെട്ട സെർവർ ആക്ഷൻ.
  • error: ഫോം സമർപ്പണം പരാജയപ്പെട്ടാൽ ഒരു എറർ ഒബ്ജക്റ്റ്. ഈ ഒബ്ജക്റ്റിൽ സെർവറിൽ സംഭവിച്ച പിശകിനെക്കുറിച്ചുള്ള വിവരങ്ങൾ അടങ്ങിയിരിക്കും.

experimental_useFormStatus എങ്ങനെ ഉപയോഗിക്കാം

experimental_useFormStatus എങ്ങനെ ഉപയോഗിക്കാമെന്ന് വിശദീകരിക്കാൻ ഒരു പ്രായോഗിക ഉദാഹരണത്തിലൂടെ കടന്നുപോകാം. പേര്, ഇമെയിൽ, സന്ദേശം എന്നിവയ്ക്കുള്ള ഫീൽഡുകളുള്ള ഒരു ലളിതമായ കോൺടാക്റ്റ് ഫോം ഞങ്ങൾ ഉണ്ടാക്കും, കൂടാതെ ലോഡിംഗ് ഇൻഡിക്കേറ്ററുകളും പിശക് സന്ദേശങ്ങളും പ്രദർശിപ്പിക്കുന്നതിന് ഹുക്ക് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് കാണിക്കും.

ആവശ്യകതകൾ

തുടങ്ങുന്നതിനുമുമ്പ്, നിങ്ങൾ ഒരു റിയാക്റ്റ് പ്രോജക്റ്റ് സജ്ജീകരിച്ചിട്ടുണ്ടെന്നും എക്സ്പെരിമെൻ്റൽ ഫീച്ചറുകൾ പിന്തുണയ്ക്കുന്ന ഒരു റിയാക്റ്റ് പതിപ്പാണ് ഉപയോഗിക്കുന്നതെന്നും ഉറപ്പാക്കുക. നിങ്ങളുടെ react.config.js ഫയലിൽ (അല്ലെങ്കിൽ നിങ്ങളുടെ ബിൽഡ് ടൂളിന്റെ തത്തുല്യമായ കോൺഫിഗറേഷനിൽ) എക്സ്പെരിമെൻ്റൽ ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കേണ്ടതായി വന്നേക്കാം. കൂടാതെ, ഫോം സമർപ്പണം കൈകാര്യം ചെയ്യാനും ഉചിതമായ പ്രതികരണങ്ങൾ നൽകാനും ഒരു ബാക്കെൻഡ് (ഉദാഹരണത്തിന്, എക്സ്പ്രസ് ഉള്ള Node.js) കോൺഫിഗർ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.

ഉദാഹരണം: കോൺടാക്റ്റ് ഫോം

റിയാക്റ്റ് കമ്പോണന്റ് കോഡ് താഴെ നൽകുന്നു:


import React, { useState } from 'react';
import { experimental_useFormStatus as useFormStatus } from 'react-dom';

async function handleSubmit(formData) {
  'use server';

  try {
    const response = await fetch('/api/contact', {
      method: 'POST',
      body: formData,
    });

    if (!response.ok) {
      const errorData = await response.json();
      throw new Error(errorData.message || 'Form submission failed');
    }

    // വിജയകരമായ സമർപ്പണം കൈകാര്യം ചെയ്യുക (ഉദാഹരണത്തിന്, റീഡയറക്ട് ചെയ്യുക, വിജയ സന്ദേശം കാണിക്കുക)
    console.log('Form submitted successfully!');
    // ഒരു യഥാർത്ഥ ആപ്ലിക്കേഷനിൽ, നിങ്ങൾ ഇവിടെ റീഡയറക്ട് ചെയ്യുകയോ സ്റ്റേറ്റ് അപ്ഡേറ്റ് ചെയ്യുകയോ ചെയ്യാം
    return { success: true, message: 'Form submitted successfully!' };

  } catch (error) {
    console.error('Error submitting form:', error);
    return { success: false, message: error.message };
  }
}

function ContactForm() {
  const [formData, setFormData] = useState({
    name: '',
    email: '',
    message: '',
  });

  const { pending, data, error } = useFormStatus();

  const handleChange = (e) => {
    setFormData({ ...formData, [e.target.name]: e.target.value });
  };

  return (