Middle
Kuidas sa töötad vormidega üheleheküljelistes rakendustes (SPA)?
sobes.tech AI
Vastus AI-lt
SPA-formidega töötades kasutan kontrollitud (controlled) või kontrollimata (uncontrolled) komponente.
Kontrollitud komponendid: Forma väli hoitakse komponendi olekus ja uuendatakse setState kaudu.
// React kontrollitud vormi näide
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('Saadetud:', name);
};
return (
<form onSubmit={handleSubmit}>
<label>
Nimi:
<input type="text" value={name} onChange={handleChange} />
</label>
<button type="submit">Saada</button>
</form>
);
}
Kontrollitud komponentide eelised:
- Lihtsam kontrollida ja valideerida sisendit.
- Lihtsam tingimusliku väljade kuvamise loogika.
- Mugav integreerida seisundi haldamise teekidega (Redux, Vuex).
Kontrollimata komponendid: Välja väärtus hoitakse otse DOM-elemendis, millele pääseb ligi ref kaudu.
// React kontrollimata vormi näide
import React, { useRef } from 'react';
function MyUncontrolledForm() {
const inputRef = useRef(null);
const handleSubmit = (event) => {
event.preventDefault();
console.log('Saadetud:', inputRef.current.value);
};
return (
<form onSubmit={handleSubmit}>
<label>
Nimi:
<input type="text" ref={inputRef} />
</label>
<button type="submit">Saada</button>
</form>
);
}
Nekontrollitud komponentide eelised:
- Lihtsamad lihtsate vormide jaoks ilma keerulise loogikata.
- Vähem koodi põhitegevuseks.
Üldised lähenemised SPA-formidega töötamisel:
- Valideerimine:
- Klientide (JavaScript) poolel kiire tagasiside kasutajale.
- Serveri poolel andmete terviklikkuse tagamiseks.
- Valideerimise teekide kasutamine (Yup, Zod, VeeValidate, Vuelidate).
- Saadetise töötlemine:
- Vaikimisi käitumise vältimine (
event.preventDefault()). - Andmete saatmine serverile (Fetch API, Axios, XHR).
- Saatmise staatuse näitamine (laadimine, edu, viga).
- Vaikimisi käitumise vältimine (
- Oleku haldamine:
- Kohalik komponendi oleku kasutamine.
- Keerukamate vormide või andmete jaoks kasutades oleku haldamise raamistikke (Redux, Vuex, Pinia).
- Kasutaja tagasiside:
- Laadimisindikaatorid.
- Valiatsioonivigade sõnumid.
- Edu või vea sõnumid.
- Ligipääsetavus (A11y):
- Semantiliste HTML-elementide kasutamine (
<form>,<label>,<input>,<button>). <label>sidumine vastavate sisenditega (atribuutforvõi sisestus).- WAI-ARIA atribuutide kasutamine vajadusel.
- Semantiliste HTML-elementide kasutamine (
- Tõhusus:
- Debouncing või throttling
onChangesündmusi sagedaste muutuste korral. - Rerenderimise optimeerimine vormi oleku muutmisel.
- Debouncing või throttling
- Testimine:
- Üksuse testid vormi loogikale ja valideerimisele.
- Integreerimistestid API-ga suhtlemiseks.
Valik kontrollitud ja kontrollimata komponentide vahel sõltub vormi keerukusest ning oleku ja valideerimise nõuetest. Enamikel juhtudel, eriti keerukates vormides, pakuvad kontrollitud komponendid suuremat paindlikkust ja kontrolli.