React useFormStatus asünkroonne valideerimine: Vormi staatuse asünkroonsed uuendused | MLOG | MLOG

Selles näites:

Selgitus

`useFormStatus` hook annab teavet viimase vormi esitamise kohta. Täpsemalt on `pending` omadus tõeväärtus, mis näitab, kas vorm on hetkel esitamisel. `data` omadus sisaldab vormi andmeid, kui need on saadaval. `action` omadus tagastab funktsiooni, mida kasutati vormi tegevusena.

Täiustatud tehnikad ja parimad praktikad

1. Debouncing parema jõudluse tagamiseks

Olukordades, kus kasutajad tipivad kiiresti, näiteks kasutajanime või e-posti valideerimisel, võib API-kutse käivitamine igal klahvivajutusel olla ebaefektiivne ja potentsiaalselt teie serverit üle koormata. Debouncing on tehnika, mis piirab funktsiooni kutsumise sagedust. Rakendage debouncing-funktsioon, et lükata valideerimine edasi, kuni kasutaja on teatud aja jooksul tippimise lõpetanud.

            import React, { useState, useCallback, useTransition } from 'react';
import { useFormStatus } from 'react-dom';

function UsernameForm() {
  const [username, setUsername] = useState('');
  const [isPending, startTransition] = useTransition();

  // Debounce-funktsioon
  const debounce = (func, delay) => {
    let timeoutId;
    return (...args) => {
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() => {
        func(...args);
      }, delay);
    };
  };

  const debouncedHandleSubmit = useCallback(
    debounce(async (formData) => {
      "use server";
      const username = formData.get('username');

      // Simuleerime API-kutset kasutajanime saadavuse kontrollimiseks
      await new Promise(resolve => setTimeout(resolve, 500)); // Simuleerime võrgu latentsust

      const isAvailable = username !== 'taken'; // Saadavuse kontrolli imiteerimine

      if (!isAvailable) {
        throw new Error('Username is already taken.');
      }

      console.log('Username is available!');
      // Teosta tegelik vormi esitamine siin
    }, 500), // 500ms viivitus
    []
  );

  return (
    <form action={debouncedHandleSubmit}>
      <label htmlFor="username">Kasutajanimi:</label>
      <input
        type="text"
        id="username"
        name="username"
        value={username}
        onChange={(e) => setUsername(e.target.value)}
      />
      <button type="submit" disabled={isPending}>
        {isPending ? 'Kontrollin...' : 'Esita'}
      </button>
       <StatusComponent />
    </form>
  );
}

function StatusComponent() {
    const { pending, data, method, action } = useFormStatus();

    return (
        <p>
          {pending && "Esitan..."}
          {data && <pre>{JSON.stringify(data)}</pre>}
        </p>
    )
}

export default UsernameForm;

            

Selles täiustatud näites:

2. Throttling sageduse piiramiseks

Kui debouncing hoiab ära liigsed API-kutsed lühikese aja jooksul, siis throttling tagab, et funktsiooni kutsutakse regulaarse intervalliga. See võib olla kasulik, kui peate regulaarselt teostama mingit valideerimist, kuid ei soovi oma serverit üle koormata. Näiteks piirates API-kutsete sagedust minutis.

3. Optimistlikud uuendused

Optimistlikud uuendused parandavad kasutajakogemust, uuendades kasutajaliidest kohe, justkui vormi esitamine oleks õnnestunud, isegi enne kui server seda kinnitab. See loob tajutavalt kiirema reageerimisaja. Siiski on ülioluline võimalikke vigu sujuvalt käsitleda. Kui serveripoolne valideerimine ebaõnnestub, taastage kasutajaliides eelmisesse olekusse ja kuvage veateade.

4. Vigade käsitlemine ja kasutaja tagasiside

Pakkuge kasutajale selgeid ja informatiivseid veateateid, kui valideerimine ebaõnnestub. Märkige, milline väli (või väljad) vea põhjustas, ja soovitage parandusmeetmeid. Parema nähtavuse huvides kaaluge veateadete kuvamist otse vastavate sisendväljade kõrval.

5. Ligipääsetavuse kaalutlused

Tagage, et teie vormid oleksid ligipääsetavad puuetega kasutajatele. Kasutage sobivaid ARIA atribuute, et anda semantilist teavet vormielementide ja nende olekute kohta. Näiteks kasutage aria-invalid atribuuti kehtetute sisendväljade märkimiseks ja aria-describedby atribuuti veateadete seostamiseks vastavate väljadega.

6. Rahvusvahelistamine (i18n)

Globaalsele sihtrühmale vorme arendades arvestage rahvusvahelistamisega. Kasutage teeke nagu i18next või React Intl, et pakkuda tõlgitud veateateid ja kohandada vormi paigutust erinevatele keeltele ja kultuurilistele tavadele. Näiteks kuupäevavormingud ja aadressiväljad on riigiti erinevad.

7. Turvalisuse parimad praktikad

Teostage alati serveripoolne valideerimine lisaks kliendipoolsele valideerimisele. Kliendipoolne valideerimine on peamiselt kasutajakogemuse jaoks ja sellest saab mööda hiilida. Serveripoolne valideerimine kaitseb teie rakendust pahatahtliku sisendi eest ja tagab andmete terviklikkuse. Puhastage kasutaja sisend, et vältida saidiülest skriptimist (XSS) ja muid turvaauke. Kasutage ka sisuturbe poliitikat (CSP), et kaitsta XSS rünnakute eest.

8. Erinevate vormi esitamise meetodite käsitlemine

useFormStatus hook töötab hästi nii GET kui ka POST meetoditega. `method` omadus tagastatud objektis sisaldab vormi esitamiseks kasutatud HTTP meetodit. Veenduge, et teie serveripoolne loogika käsitleks mõlemat meetodit asjakohaselt. GET-päringuid kasutatakse tavaliselt lihtsaks andmete hankimiseks, samas kui POST-päringuid kasutatakse andmete loomiseks või muutmiseks.

9. Integreerimine vormiteekidega

Kuigi useFormStatus pakub põhilist mehhanismi vormi esitamise staatuse haldamiseks, saate selle integreerida põhjalikumate vormiteekidega nagu Formik, React Hook Form või Final Form. Need teegid pakuvad täiustatud funktsioone, nagu vormi oleku haldamine, valideerimisreeglid ja väljataseme vigade käsitlemine. Kasutage useFormStatus't, et parandada kasutajakogemust asünkroonse valideerimise ajal nendes teekides.

10. Asünkroonse valideerimise testimine

Kirjutage ühiktestid, et kontrollida, kas teie asünkroonne valideerimisloogika töötab korrektselt. Imiteerige API-kutseid, kasutades teeke nagu Jest ja Mock Service Worker (MSW). Testige nii edukaid kui ka veastsenaariume, et tagada, et teie vorm käsitleb kõiki juhtumeid sujuvalt. Samuti testige oma vormide ligipääsetavuse funktsioone, et tagada nende kasutatavus puuetega inimestele.

Reaalse maailma näited üle maailma

Vaatleme, kuidas asünkroonset valideerimist kasutatakse erinevates reaalsetes stsenaariumides üle maailma:

Kokkuvõte

Asünkroonne valideerimine on asendamatu tehnika robustsete ja kasutajasõbralike vormide loomiseks Reactis. Kasutades useFormStatus't, debouncing'ut, throttling'ut ja muid täiustatud tehnikaid, saate pakkuda kasutajatele reaalajas tagasisidet, ennetada vigu ja parandada üldist vormi esitamise kogemust. Ärge unustage seada esikohale ligipääsetavust, turvalisust ja rahvusvahelistamist, et luua vorme, mis on kasutatavad kõigile ja kõikjal. Testige ja jälgige pidevalt oma vorme, et tagada nende vastavus teie kasutajate muutuvatele vajadustele ja teie rakenduse nõudmistele.