Middle
Hogyan dolgozol az űrlapokkal egylapos alkalmazásokban (SPA)?
sobes.tech MI
Válasz az MI-től
SPA-ban űrlapokkal való munkavégzés során irányított (controlled) vagy irányítatlan (uncontrolled) komponenseket használok.
Irányított komponensek: Az űrlap mező értéke a komponens állapotában tárolódik, és a setState segítségével frissül.
// React-ben irányított űrlap komponens példája
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('Elküldve:', name);
};
return (
<form onSubmit={handleSubmit}>
<label>
Név:
<input type="text" value={name} onChange={handleChange} />
</label>
<button type="submit">Elküld</button>
</form>
);
}
Az irányított komponensek előnyei:
- Könnyebb ellenőrizni és validálni a bevitelét.
- Egyszerűbb a feltételes mezőmegjelenítés logikájának megvalósítása.
- Könnyű integrálni állapotkezelő könyvtárakkal (Redux, Vuex).
Irányítatlan komponensek: A mező értéke közvetlenül a DOM elemben tárolódik, és a ref segítségével érhető el.
// React-ben irányítatlan űrlap komponens példája
import React, { useRef } from 'react';
function MyUncontrolledForm() {
const inputRef = useRef(null);
const handleSubmit = (event) => {
event.preventDefault();
console.log('Elküldve:', inputRef.current.value);
};
return (
<form onSubmit={handleSubmit}>
<label>
Név:
<input type="text" ref={inputRef} />
</label>
<button type="submit">Elküld</button>
</form>
);
}
Az irányítatlan komponensek előnyei:
- Egyszerűbbek egyszerű űrlapok esetén, ahol nincs szükség komplex logikára.
- Kevesebb kód szükséges az alapvető megvalósításhoz.
Általános megközelítések SPA-ban a formok kezeléséhez:
- Validálás:
- Oldalon (JavaScript) a felhasználói visszacsatolás gyorsítása érdekében.
- Szerver oldalon az adatok integritásának biztosítására.
- Validációs könyvtárak használata (Yup, Zod, VeeValidate, Vuelidate).
- Küldés kezelése:
- Az alapértelmezett viselkedés megakadályozása (
event.preventDefault()). - Adatok küldése a szerverre (Fetch API, Axios, XHR).
- A küldés státuszának megjelenítése (betöltés, siker, hiba).
- Az alapértelmezett viselkedés megakadályozása (
- Állapotkezelés:
- A komponens helyi állapotának használata.
- Állapotkezelő rendszerek (Redux, Vuex, Pinia) használata komplexebb vagy más részeken is használt űrlapok esetén.
- Felhasználói visszacsatolás:
- Betöltési indikátorok.
- Validációs hibák üzenetei.
- Siker vagy hiba üzenetek küldéskor.
- Elérhetőség (A11y):
- Szemantikus HTML elemek használata (
<form>,<label>,<input>,<button>). - A
<label>összekapcsolása a megfelelő bemeneti mezővel (forattribútum vagy beágyazás). - WAI-ARIA attribútumok használata szükség szerint.
- Szemantikus HTML elemek használata (
- Teljesítmény:
onChangeesemények debounce vagy throttle alkalmazása gyakori változások esetén.- A renderelés optimalizálása a form állapotának változásakor.
- Tesztelés:
- Egység tesztek a formák logikájához és validációjához.
- Integrációs tesztek az API-val való interakciókhoz.
A választás az irányított és irányítatlan komponensek között a form komplexitásától és a státusz, validálás kezelésének igényeitől függ. A legtöbb, különösen összetett, formában az irányított komponensek nagyobb rugalmasságot és kontrollt kínálnak.