Middle
Kaip dirbate su formomis vieno puslapio programose (SPA)?
sobes.tech AI
Atsakymas iš AI
Naudodamasis SPA formomis, naudoju valdomus (controlled) arba nekontroliuojamus (uncontrolled) komponentus.
Valdomi komponentai: Formos lauko reikšmė saugoma komponento būsenoje ir atnaujinama per setState.
// React valdomo formos komponento pavyzdys
import React, { useState } from 'react';
function MyForm() {
const [name, setName] = useState('');
const handleChange = (event) => {
setName(event.target.value);
};
const handleSubmit = (event) => {
event.preventDefault();
console.log('Išsiųsta:', name);
};
return (
<form onSubmit={handleSubmit}>
<label>
Vardas:
<input type="text" value={name} onChange={handleChange} />
</label>
<button type="submit">Siųsti</button>
</form>
);
}
Privalumai valdomų komponentų:
- Lengviau kontroliuoti ir validuoti įvestį.
- Paprasčiau įgyvendinti sąlyginį laukų rodymą.
- Patogu integruoti su būsenos valdymo bibliotekomis (Redux, Vuex).
Nekontroliuojami komponentai: Formos lauko reikšmė saugoma tiesiogiai DOM elemente, prie kurio prieinama per ref.
// React nekontroliuojamo formos komponento pavyzdys
import React, { useRef } from 'react';
function MyUncontrolledForm() {
const inputRef = useRef(null);
const handleSubmit = (event) => {
event.preventDefault();
console.log('Išsiųsta:', inputRef.current.value);
};
return (
<form onSubmit={handleSubmit}>
<label>
Vardas:
<input type="text" ref={inputRef} />
</label>
<button type="submit">Siųsti</button>
</form>
);
}
Privalumai nekontroliuojamų komponentų:
- Paprasčiau paprastoms formoms be sudėtingos logikos.
- Mažiau kodo bazės realizacijai.
Bendros formų valdymo SPA:
- Validacija:
- Kliento pusėje (JavaScript) greitam vartotojo atsiliepimui.
- Serverio pusėje duomenų vientisumui užtikrinti.
- Naudojant validacijos bibliotekas (Yup, Zod, VeeValidate, Vuelidate).
- Siuntimo apdorojimas:
- Prevencijos default elgesio (
event.preventDefault()). - Duomenų siuntimas į serverį (Fetch API, Axios, XHR).
- Siuntimo būsenos rodymas (įkėlimas, sėkmė, klaida).
- Prevencijos default elgesio (
- Būsenos valdymas:
- Vietinės komponento būsenos naudojimas.
- Sudėtingesniems formoms ar duomenims, naudojant būsenos valdymo sprendimus (Redux, Vuex, Pinia).
- Vartotojo atsiliepimas:
- Įkėlimo indikatoriai.
- Validacijos klaidų pranešimai.
- Sėkmingo ar klaidų pranešimai.
- Prieinamumas (A11y):
- Semantiniai HTML elementai (
<form>,<label>,<input>,<button>). <label>susiejimas su atitinkamais įvesties laukais (atributasforarba įdėjimas viduje).- WAI-ARIA atributų naudojimas, jei reikia.
- Semantiniai HTML elementai (
- Našumas:
- Debaunso arba trinktelių
onChangeįvykių valdymas dažnai keičiančiuose laukus. - Optimizuoti rėdinimą keičiant formos būseną.
- Debaunso arba trinktelių
- Testavimas:
- Vienetų testai formos logikai ir validacijai.
- Integraciniai testai sąveikai su API.
Pasirinkimas tarp valdomų ir nekontroliuojamų komponentų priklauso nuo formos sudėtingumo ir būsenos bei validacijos reikalavimų. Daugeliu atvejų, ypač sudėtingose formose, valdomi komponentai siūlo daugiau lankstumo ir kontrolės.