React formas un kontrolētie komponenti…

Pārlūkojot internetu, pastāv liela iespēja, ka nonāksiet veidlapā, jeb ievades formā pat, ja to iespējams  nepamanīsiet. No vienkāršas e-pasta ievades un biļetenu abonēšanas līdz sarežģītākām formām, piemēram, konta izveidei iecienītākajā sociālo mediju platformā , formas ir visur. Iespējams, jūs regulāri ieviesīsiet tās savās lietojumprogrammās.

Šajā rakstā jūs uzzināsiet par React kontrolēto komponentu jēdzienu un to, kā tie tiek izmantoti formu procesos.

  • Controlled components in React

HTML veidlapu pamatjēdzieni un tas, kā forumus var izveidot kā React komponentus.

  • HTML forms

Runājot par React lietojumprogrammām, HTML veidlapas darbojas atšķirīgi no citiem DOM elementiem.

 

Atcerēties, ka DOM ir loģiska kokam līdzīga struktūra, kas attēlo HTML dokumentu, un tā izmanto mezglus, lai aprakstītu dažādas dokumenta daļas.

DOM structure

Tradicionālās HTML veidlapas

 

Tradicionālās HTML veidlapas saglabā noteiktu iekšējo stāvokli DOM, un to iesniegšanas laikā tām ir noteikta noklusējuma darbība. Tas parasti tiek darīts, izmantojot darbības atribūtu, kas norāda uz galapunktu, kas apstrādās pieprasījumu. Bet ko darīt, ja vēlaties detalizētāku kontroles līmeni?

Piemērs:

<form action="/konta_izveidosana.php">

<label>

Vārds:
<input type="text" name="name" />

</label>

<input type="submit" value="Sūtīt" />

</form>

Piemēram, lai restorāna klienti var rezervēt galdiņu vietnē, izmantojot veidlapu. Iedomājieties, ja būtu funkcija, kas varētu apstrādāt veidlapas iesniegšanu un piekļūt datiem, ko lietotājs tajā ievadījis. Šeit tiek izmantoti kontrolētie komponenti. Kontrolētie komponenti ir komponentu kopa, kas piedāvā deklaratīvu lietojumprogrammu saskarni vai API, (declaritive application programming interface ) kas ļauj pilnībā kontrolēt veidlapas elementu stāvokli jebkurā brīdī, izmantojot React state.

onCharge Callback – atzvanīšana

Tā vietā, lai paļautos uz DOM elementu sākotnējo stāvokli, React state tiek padarīts par vienu patiesības avotu, kas visu laiku kontrolē jūsu veidlapas elementu parādīto vērtību. Veids, kā jūs veicat šo stāvokļa deleģēšanu, tiek izmantots, izmantojot vērtību propu (value prop). Vērtība ir īpašs rekvizīts, ko React pievieno lielākajai daļai veidlapas elementu, lai noteiktu ievades saturu jebkurā renderēšanas dzīves cikla brīdī. Lai izveidotu kontrolētu komponentu, ir jāizmanto Local state un Value prop kombinācija. Sākotnēji vērtības īpašumam piešķirsiet Value prop. Bet kā iegūt atjauninājumus no jebkuras jaunas teksta rakstzīmes, kas ievadītas formas logā? Lai to izdarītu, jums ir nepieciešams otrs atbalsts, lai pabeigtu kontrolētā komponenta dizainu — onChange callback. OnChange callback saņem notikuma parametru, kas ir notikuma objekts, kas attēlo darbību, kas tikko notika, līdzīgi notikumiem DOM elementos. Lai iegūtu jauno vērtību no katra taustiņsitiena, jums ir jāpiekļūst mērķa rekvizītam (piemērā: setValue(event.target.value); )no notikuma un jāsatver šī objekta vērtība, kas ir virkne.

onChange callback piemērs:

handleChange(event) {

setValue(event.target.value);

}

Visbeidzot, lai kontrolētu veidlapas vērtības ikreiz, kad veidlapa tiek iesniegta, formas HTML elementā varat izmantot rekvizītu onSubmit.

<form onSubmit={handleSubmit}>

...

</form>

handleSubmit(event) {

validate(value);

event.preventDefault();

}

OnSubmit – nosūtīšana

OnSubmit callback kā parametru saņem arī DOM līdzīgu notikumu. Šeit varat piekļūt savām veidlapas vērtībām, lai veiktu jebkuru vēlamo loģiku, kas jāveic pirms iesniegšanas, piemēram, lai apstiprinātu ievades vērtības. Turklāt, ja vēlaties novērst noklusējuma HTML veidlapas darbību, onSubmit callback ietvaros ir jāizsauc event.preventDefault();.

Ievada nobeigums

Nu, lūk. Jūs esat atklājis paņēmienu, ko sauc par kontrolētiem komponentiem, kas ļauj ieslēgt React kā patiesības avotu jūsu veidlapas ievades stāvoklim. React piedāvā kontrolētas versijas lielākajai daļai ievades veidu un iesaka izmantot kontrolētos komponentus forumu ieviešanai. Tomēr ņemiet vērā, ka joprojām ir daži formas elementi, kas joprojām ir nekontrolēti, līdzīgi kā to DOM ekvivalenti.

Šajā raksta daļā jūs guvāt ievadu un uzzinājāt par kontrolēto komponentu un React jēdzienu un to, kā tie tiek izmantoti ārējos procesos. Jūs arī izpētījāt HTML formu pamatjēdzienus un to, kā veidlapas var izveidot kā React komponentus.

Turpinājumā:

Kontrolētie komponenti pret Nekontrolētajiem komponentiem

Šajā raksta daļā jūs iemācīsieties strādāt ar nekontrolētām ievadēm programmā React un kontrolētu ieeju priekšrocības, izmantojot stāvokļa plānošanu. Jūs arī uzzināsiet, kad izvēlēties kontrolētas vai nekontrolētas ievades, un funkcijas, ko atbalsta katra opcija.

Vairumā gadījumu React iesaka izmantot kontrolētos komponentus veidlapu ieviešanai. Lai gan šī pieeja atbilst React deklaratīvajam modelim, nekontrolēti veidlapas lauki joprojām ir derīga iespēja, un tiem ir savas priekšrocības. Sadalīsim tās, lai redzētu atšķirības starp abām pieejām un to, kad jāizmanto katra metode.

Nekontrolētas ievades

Nekontrolētas ievades ir kā standarta HTML veidlapas ievades:

const Form = () => { 
 return ( 
   <div> 
     <input type="text" /> 
   </div> 
 ); 
}; 

Šīs ievades precīzi atceras, ko jūs ierakstījāt, kā pati DOM, kas uztur šo iekšējo stāvokli. Kā jūs varat iegūt to vērtību? Atbilde ir, izmantojot React ref.

Tālāk esošajā kodā varat redzēt, kā atsauce tiek izmantota, lai piekļūtu ievades vērtībai ikreiz, kad tiek iesniegta veidlapa.

const Form = () => { 
 const inputRef = useRef(null); 


 const handleSubmit = () => { 
   const inputValue = inputRef.current.value; 
   // Dari kautko ar doto vērtību
 } 
 return ( 
   <form onSubmit={handleSubmit}> 
     <input ref={inputRef} type="text" /> 
   </form> 
 ); 
}; 

Citiem vārdiem sakot, jums ir jāizvelk vērtība no lauka, kad nepieciešams.

Nekontrolēti komponenti ir vienkāršākais veids, kā ieviest veidlapas ievades. Viņiem noteikti ir vērtīgi gadījumi, it īpaši, ja jūsu forma ir vienkārša. Diemžēl tie nav tik spēcīgi kā to līdzinieki, tāpēc tālāk apskatīsim kontrolētās ievades.

 

Kontrolētās ievades

Kontrolētās ievades pieņem to pašreizējo vērtību kā atbalstu un atzvanu (callback), lai mainītu šo vērtību. Tas nozīmē, ka ievades vērtībai kaut kur ir jādzīvo reaģēšanas stāvoklī. Parasti komponents, kas atveido ievadi (piemēram, veidlapas komponents), saglabā to savā state:

const Form = () => { 
 const [value, setValue] = useState(""); 


 const handleChange = (e) => { 
   setValue(e.target.value) 
 } 


 return ( 
   <form> 
     <input 
       value={value} 
       onChange={handleChange} 
       type="text" 
     /> 
   </form> 
 ); 
}; 
Katru reizi, kad ierakstāt jaunu rakstzīmi, tiek izpildīta funkcija handleChange. Tas saņem jauno ievades vērtību un pēc tam iestata to iekš state. Iepriekš minētajā koda piemērā plūsma būtu šāda:
  • Ievade sākas ar tukšu virkni: ” “
  • Jūs ierakstāt “a”, un handleChange notikuma objektā pievieno “a” kā e.target.valueun pēc tam kopā ar to izsauc setValue. Pēc tam ievade tiek atjaunināta, lai tās vērtība būtu “a”.
  • Jūs ierakstāt “b”, un handChange tiek izsaukts ar e.target.value vērtību “ab”. un iestata to uz state. Tas tiek noteikts steitā. Pēc tam ievade tiek vēlreiz atveidota ar vērtību = “ab” .

Šī plūsma novirza vērtības izmaiņas uz veidlapas komponentu, nevis izvelk kā atsauces piemērā no nekontrolētas versijas. Tāpēc Form komponentam vienmēr ir ievades pašreizējā vērtība, to neprasot tieši.

Rezultātā jūsu dati (React state) un lietotāja saskarne (input tags) vienmēr ir sinhronizēti. Vēl viena ietekme ir tāda, ka veidlapas var nekavējoties reaģēt uz ievades izmaiņām, piemēram, šādi:

  • Tūlītēja apstiprināšana katrā laukā
  • Iesniegšanas pogas atspējošana, ja vien visos laukos nav derīgu datu
  • Noteikta ievades formāta, piemēram, tālruņa vai kredītkaršu numuru, ieviešana

Dažreiz jūs atklāsiet, ka nekas no tā nav vajadzīgs. Tādā gadījumā nekontrolēta varētu būt vienkāršāka izvēle.

Failu ievadīšanas tips, jeb augšupielāde

Ir dažas īpašas veidlapas ievades, kuras vienmēr netiek kontrolētas, piemēram, faila ievades tags.

Programmā React <input type=”file” /> vienmēr ir nekontrolēts komponents, jo tā vērtība ir tikai lasāma un to nevar iestatīt programmatiski.

Šis piemērs ilustrē, kā izveidot atsauci uz DOM mezglu, lai piekļūtu visiem failiem, kas atlasīti veidlapas iesniegšanas apstrādātājā:

const Form = () => { 
 const fileInput = useRef(null); 


 const handleSubmit = (e) => { 
   e.preventDefault(); 
   const files = fileInput.current.files; 
   // Dari kautko ar failiem šeit 
 } 


 return ( 
   <form onSubmit={handleSubmit}> 
     <input 
       ref={fileInput} 
       type="file" 
     /> 
   </form> 
 ); 
}; 

Secinājums

Nekontrolēti komponenti ar atsaucēm ir labi, ja jūsu veidlapa ir neticami vienkārša attiecībā uz lietotāja saskarnes atsauksmēm. Tomēr kontrolētie ievades lauki ir pareizais veids, ja veidlapās ir nepieciešams vairāk līdzekļu.

Novērtējiet savu konkrēto situāciju un izvēlieties sev piemērotāko iespēju.

Tālāk esošajā tabulā ir apkopotas katras atbalstītās funkcijas:

 

Funkcija Nekontrolēts kontrolēts
Vienreizēja vērtību izgūšana (piemēram, iesniegšanas laikā)
Apstiprināšana iesniegšanas brīdī
Tūlītēja lauka validācija
Iesniegšanas pogas nosacīti atspējošana
Noteikta ievades formāta izpilde
Vairākas ievades vienam datu vienumam
Dinamiskās ieejas

 

Un tas šajā rakstā ir viss par kontrolētām un nekontrolētām sastāvdaļām. Jūs esat detalizēti uzzinājis par katru opciju, kad izvēlēties vienu vai otru, un, visbeidzot, atbalstīto funkciju salīdzinājumu.

Loading

Noderīgs raksts? Dalies ar citiem: