Latviešu

Visaptveroša rokasgrāmata par React useFormStatus āķi, kas palīdz izstrādātājiem radīt saistošu un informatīvu veidlapu iesniegšanas pieredzi globāliem lietotājiem.

React useFormStatus: Veidlapu iesniegšanas stāvokļa pārvaldība

Veidlapas ir neskaitāmu tīmekļa lietojumprogrammu pamats, kas kalpo kā galvenais līdzeklis lietotājiem, lai mijiedarbotos ar serveriem un sniegtu tiem datus. Vienmērīga un informatīva veidlapas iesniegšanas procesa nodrošināšana ir būtiska, lai radītu pozitīvu lietotāja pieredzi. React 18 ieviesa jaudīgu āķi (hook) ar nosaukumu useFormStatus, kas paredzēts, lai vienkāršotu veidlapu iesniegšanas stāvokļa pārvaldību. Šī rokasgrāmata sniedz visaptverošu pārskatu par useFormStatus, izpētot tā funkcijas, lietošanas gadījumus un labākās prakses, lai izveidotu pieejamas un saistošas veidlapas globālai auditorijai.

Kas ir React useFormStatus?

useFormStatus ir React āķis, kas sniedz informāciju par veidlapas iesniegšanas statusu. Tas ir izstrādāts, lai nevainojami darbotos ar servera darbībām (server actions) — funkciju, kas ļauj izpildīt servera puses loģiku tieši no jūsu React komponentiem. Āķis atgriež objektu, kas satur informāciju par veidlapas gaidīšanas stāvokli, datiem un jebkādām kļūdām, kas radušās iesniegšanas laikā. Šī informācija ļauj jums sniegt reāllaika atgriezenisko saiti lietotājiem, piemēram, parādot ielādes indikatorus, atspējojot veidlapas elementus un parādot kļūdu ziņojumus.

Izpratne par servera darbībām

Pirms iedziļināties useFormStatus, ir svarīgi saprast servera darbības. Servera darbības ir asinhronas funkcijas, kas darbojas serverī un kuras var izsaukt tieši no React komponentiem. Tās tiek definētas, izmantojot direktīvu 'use server' faila augšpusē. Servera darbības parasti tiek izmantotas tādiem uzdevumiem kā:

Šeit ir vienkāršs servera darbības piemērs:

// actions.js
'use server';

export async function submitForm(formData) {
  // Simulē aizkavi, lai atdarinātu servera pieprasījumu
  await new Promise(resolve => setTimeout(resolve, 2000));

  const name = formData.get('name');
  const email = formData.get('email');

  if (!name || !email) {
    return { message: 'Lūdzu, aizpildiet visus laukus.' };
  }

  // Simulē veiksmīgu iesniegšanu
  return { message: `Veidlapa veiksmīgi iesniegta lietotājam ${name}!` };
}

Šī darbība kā ievadi pieņem veidlapas datus, simulē aizkavi un pēc tam atgriež veiksmes vai kļūdas ziņojumu. Direktīva 'use server' norāda React, ka šī funkcija jāizpilda serverī.

Kā darbojas useFormStatus

useFormStatus āķis tiek izmantots komponentā, kas renderē veidlapu. Tas ir jāizmanto <form> elementā, kas izmanto `action` rekvizītu ar importētu servera darbību. Āķis atgriež objektu ar šādām īpašībām:

Šeit ir piemērs, kā izmantot useFormStatus React komponentā:

'use client'
import { useFormStatus } from 'react-dom';
import { submitForm } from './actions';

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

  return (
    <form action={submitForm}>
      <label htmlFor="name">Vārds:</label>
      <input type="text" id="name" name="name" disabled={pending} />
      <label htmlFor="email">E-pasts:</label>
      <input type="email" id="email" name="email" disabled={pending} />
      <button type="submit" disabled={pending}>
        {pending ? 'Iesniedz...' : 'Iesniegt'}
      </button>
      {error && <p style={{ color: 'red' }}>Kļūda: {error.message}</p>}
      {data && data.message && <p style={{ color: 'green' }}>{data.message}</p>}
    </form>
  );
}

export default MyForm;

Šajā piemērā:

useFormStatus lietošanas priekšrocības

useFormStatus piedāvā vairākas priekšrocības veidlapu iesniegšanas stāvokļa pārvaldībā:

Labākās prakses useFormStatus lietošanai

Lai maksimāli izmantotu useFormStatus priekšrocības, apsveriet šādas labākās prakses:

useFormStatus lietošanas gadījumi

useFormStatus ir piemērojams plašā scenāriju klāstā:

Internacionalizācijas (i18n) risināšana

Veidojot veidlapas globālai auditorijai, internacionalizācija (i18n) ir ļoti svarīga. Lūk, kā risināt i18n, izmantojot useFormStatus:

Piemērs ar i18next:

// i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

import en from './locales/en.json';
import fr from './locales/fr.json';

i18n
  .use(initReactI18next)
  .init({
    resources: {
      en: { translation: en },
      fr: { translation: fr },
    },
    lng: 'en',
    fallbackLng: 'en',
    interpolation: {
      escapeValue: false, // react already safes from xss
    },
  });

export default i18n;

// MyForm.js

import { useTranslation } from 'react-i18next';

function MyForm() {
  const { t } = useTranslation();
  const { pending, data, error, action } = useFormStatus();

  return (
    <form action={submitForm}>
      <label htmlFor="name">{t('name')}:</label>
      <input type="text" id="name" name="name" disabled={pending} />
      <label htmlFor="email">{t('email')}:</label>
      <input type="email" id="email" name="email" disabled={pending} />
      <button type="submit" disabled={pending}>
        {pending ? t('submitting') : t('submit')}
      </button>
      {error && <p style={{ color: 'red' }}>{t('error')}: {t(error.message)}</p>}
      {data && data.message && <p style={{ color: 'green' }}>{t(data.message)}</p>}
    </form>
  );
}

export default MyForm;

Pieejamības apsvērumi

Nodrošināt pieejamību ir vissvarīgākais, veidojot veidlapas. Lūk, kā padarīt savas veidlapas pieejamākas, izmantojot useFormStatus:

Piemērs ar ARIA atribūtiem:

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

  return (
    <form action={submitForm}>
      <label htmlFor="name">Vārds:</label>
      <input
        type="text"
        id="name"
        name="name"
        disabled={pending}
        aria-invalid={!!error} // Norāda, ja ir kļūda
        aria-describedby={error ? 'name-error' : null} // Saista kļūdas ziņojumu
      />
      {error && (
        <p id="name-error" style={{ color: 'red' }} aria-live="polite">{error.message}</p>
      )}
      <label htmlFor="email">E-pasts:</label>
      <input type="email" id="email" name="email" disabled={pending} />
      <button type="submit" disabled={pending}>
        {pending ? 'Iesniedz...' : 'Iesniegt'}
      </button>
      {data && data.message && <p style={{ color: 'green' }}>{data.message}</p>}
    </form>
  );
}

Papildus pamata lietojumam: progresīvas tehnikas

Lai gan useFormStatus pamata lietojums ir vienkāršs, vairākas progresīvas tehnikas var vēl vairāk uzlabot jūsu veidlapu iesniegšanas pieredzi:

Biežāko problēmu novēršana

Lietojot useFormStatus, jūs varat saskarties ar dažām bieži sastopamām problēmām. Lūk, kā tās novērst:

Alternatīvas useFormStatus

Lai gan useFormStatus ir jaudīgs rīks, pastāv alternatīvas pieejas veidlapu iesniegšanas stāvokļa pārvaldībai, īpaši vecākās React versijās vai strādājot ar sarežģītu veidlapu loģiku:

Pieejas izvēle ir atkarīga no jūsu veidlapas sarežģītības un jūsu īpašajām prasībām. Vienkāršām veidlapām useFormStatus bieži ir visvienkāršākais un efektīvākais risinājums. Sarežģītākām veidlapām piemērotāka varētu būt veidlapu bibliotēka vai globāla stāvokļa pārvaldības risinājums.

Noslēgums

useFormStatus ir vērtīgs papildinājums React ekosistēmai, kas vienkāršo veidlapu iesniegšanas stāvokļa pārvaldību un ļauj izstrādātājiem radīt saistošāku un informatīvāku lietotāja pieredzi. Izprotot tā funkcijas, labākās prakses un lietošanas gadījumus, jūs varat izmantot useFormStatus, lai izveidotu pieejamas, internacionalizētas un veiktspējīgas veidlapas globālai auditorijai. useFormStatus pieņemšana racionalizē izstrādi, uzlabo lietotāju mijiedarbību un galu galā veicina stabilāku un lietotājam draudzīgāku tīmekļa lietojumprogrammu izveidi.

Atcerieties, ka, veidojot veidlapas globālai auditorijai, prioritāte ir pieejamība, internacionalizācija un veiktspēja. Ievērojot šajā rokasgrāmatā izklāstītās labākās prakses, jūs varat izveidot veidlapas, kas ir lietojamas visiem, neatkarīgi no viņu atrašanās vietas vai spējām. Šī pieeja veicina iekļaujošāku un pieejamāku tīmekli visiem lietotājiem.