Yup un Formik izmantošana, lai ieviestu iekļauto rakstzīmju ierobežojumu validāciju reakcijas veidlapās

Yup un Formik izmantošana, lai ieviestu iekļauto rakstzīmju ierobežojumu validāciju reakcijas veidlapās
Yup un Formik izmantošana, lai ieviestu iekļauto rakstzīmju ierobežojumu validāciju reakcijas veidlapās

Rakstzīmju ierobežojumu iekšējās validācijas apguve Formik veidlapās

Darbs ar veidlapām Reaģēt bieži vien var ietvert precīzu validācijas noteikumu pārvaldību, īpaši, ja tiek izmantotas tādas bibliotēkas kā Formik un . Viens no izplatītākajiem scenārijiem, ar ko saskaras izstrādātāji, ir rakstzīmju ierobežojumu iestatīšana ievades laukiem, piemēram, aprakstu vai teksta apgabalu ierobežošana līdz 250 rakstzīmēm.

Lai gan šķiet, ka maksimālā rakstzīmju skaita ierobežojuma pievienošana šķiet vienkārša, iekļautās validācijas kļūdu iespējošana, kad šis ierobežojums tiek pārsniegts, var radīt problēmas. Piemēram, standarta HTML rekvizīti, piemēram, maxLength, neļauj lietotājiem rakstīt, pārsniedzot ierobežojumu, taču tas apiet Jā, apstiprinājums, kurai ir jāreģistrē 251. rakstzīme, lai tiktu parādīts kļūdas ziņojums.

Šādās situācijās var būt sarežģīti atrast pareizo līdzsvaru starp ievades bloķēšanu un reāllaika atgriezeniskās saites nodrošināšanu. Izmantojot tādus risinājumus kā papildu ierobežojumu noteikšana vai paļaušanās uz lauka aizmiglošanas notikumiem, kļūdu apstrāde bieži vien ir mazāk reaģējoša vai neintuitīva.

Šajā rokasgrāmatā mēs izpētīsim metodi, kā panākt tūlītēju iekļautu validāciju, nepaļaujoties uz to maxLength. Izmantojot Formik ar , mēs iespējosim pielāgotus validācijas noteikumus, kas parāda reāllaika kļūdas ziņojumu, kad tiek pārsniegts rakstzīmju ierobežojums, piedāvājot lietotājiem nevainojamu pieredzi. 🚀

Komanda Lietošanas piemērs
setFieldValue Izmanto, lai programmatiski atjauninātu noteikta veidlapas lauka vērtību programmā Formik. Šeit tas dinamiski atjaunina apraksta lauku, tiklīdz tiek ievadītas rakstzīmes, tādējādi nodrošinot reāllaika rakstzīmju skaitu.
setFieldTouched Šī komanda manuāli iestata veidlapas lauka “pieskarto” stāvokli. Šajā skriptā tas tiek aktivizēts, kad rakstzīmju skaits pārsniedz 250, tādējādi nodrošinot apstiprinājuma atgriezenisko saiti, neprasot lietotājam aizmiglot ievades lauku.
validationSchema Norāda Yup validācijas noteikumus Formik. Šeit tas ievieš 250 rakstzīmju ierobežojumu, integrējot apraksta validācijas shēmu tieši veidlapas konfigurācijā.
Yup.string().max() Yup validācijas metode virkņu maksimālā garuma ierobežojuma noteikšanai. Šajā skriptā tas ierobežo apraksta lauku līdz 250 rakstzīmēm, parādot kļūdu, ja tas ir pārsniegts.
ErrorMessage Parāda iekļautos kļūdu ziņojumus programmā Formik, ja validācija neizdodas. Šeit tas izmanto Formik kļūdu apstrādi, lai nekavējoties parādītu ziņojumus, ja tiek pārsniegts rakstzīmju ierobežojums.
inputProps Definē papildu atribūtus teksta laukam programmā Material-UI. Šī komanda iestata rekvizītus, piemēram, maksimālo rindu skaitu vai rakstzīmju ierobežojumus, kas ietekmē lauka darbību un izskatu.
express.json() Express.js starpprogrammatūra, kas parsē ienākošās JSON lietderīgās slodzes. Aizmugursistēmas validācijas skriptā šī komanda ļauj serverim parsēt un apstrādāt JSON datus failā req.body.
descriptionSchema.validate() Piemēro Yup validācijas noteikumus servera pusē. Aizmugursistēmas skriptā tas pārbauda ienākošos datus pret rakstzīmju ierobežojuma ierobežojumu un nosūta atbildi, pamatojoties uz validācijas panākumiem vai neveiksmēm.
helperText Materiāla lietotāja interfeisa rekvizīts laukā TextField, kas ļauj zem lauka ievietot pielāgotus palīga ziņojumus. Šajā gadījumā tas parāda atlikušo rakstzīmju skaitu vai validācijas kļūdas, uzlabojot lietotāja pieredzi.
ErrorMessage component="div" Izmanto, lai pielāgotu kļūdu ziņojumu renderēšanu programmā Formik. Iestatot to uz div, šī komanda kontrolē validācijas ziņojumu formātu un izskatu.

Inline validācijas ieviešana ar Formik un Yup reāllaika atsauksmēm

Šeit sniegto React skriptu mērķis ir panākt reāllaika iekļautu validāciju teksta laukā ar ierobežotu rakstzīmju skaitu Formik veidlapā. Šī iestatīšana izmanto Formik ērtai veidlapu apstrādei un validācijas shēmas definēšanai. Galvenais izaicinājums ir fakts, ka standarta HTML ievades atribūti, piemēram, maxLength, neļauj lietotājiem tieši pārsniegt rakstzīmju ierobežojumu, kas mums neļauj aktivizēt Yup validāciju. Tā vietā mēs programmatiski pārbaudām rakstzīmju skaitu un atjauninām Formik's pieskārās statusu, ja limits ir pārsniegts. Šī pieeja ļauj lietotājiem redzēt validācijas ziņojumus brīdī, kad tie sasniedz 251 rakstzīmi, nevis gaidīt, kamēr tie atstāj lauku. 🚀

Pirmais skripts demonstrē metodi, kurā Formik's setFieldValue un setFieldTouched komandas tiek izmantotas, lai kontrolētu ievades darbību. Šeit, lietotājam rakstot, Formik onChange apdarinātājs dinamiski atjaunina apraksts laukā, ļaujot rakstzīmju skaitam palielināties līdz 251. Kad skaits pārsniedz 250, tiek aktivizēts setFieldTouched, lai atzīmētu lauku kā “pieskartu”, kas aktivizē Yup validāciju, un tiek parādīts kļūdas ziņojums. Šī tūlītējā atgriezeniskā saite ir ļoti svarīga, lai nodrošinātu, ka lietotāji tiek nekavējoties informēti, uzlabojot lietojamību un samazinot kļūdu skaitu. Iedomājieties, ka aizpildāt tiešsaistes pieteikumu, kurā tūlītēja atsauksme palīdz uzzināt, vai jums ir jārediģē atbilde, negaidot iesniegšanas kļūdu. 👍

Otrā pieeja pilnībā noņem atribūtu maxLength, paļaujoties tikai uz programmētu rakstzīmju skaita pārbaudi. Šajā versijā notikumu apstrādātājs onChange uzņemas proaktīvu lomu, nodrošinot, ka, ja rakstzīmju skaits ir mazāks vai vienāds ar 250, lauka vērtība tiek atjaunināta kā parasti. Ja ievade sasniedz 251 rakstzīmes slieksni, ievade nebloķē papildu rakstzīmi, bet tā vietā atzīmē lauku, kā tas ir pieskāries. Tas nodrošina vienmērīgu rakstīšanas pieredzi bez stingriem ierobežojumiem, nodrošinot maigāku veidu, kā rīkoties ar pārpildīšanu. HelperText kalpo arī kā tiešs rakstzīmju skaitītājs, palīdzot lietotājiem sekot līdzi atlikušajām rakstzīmēm rakstīšanas laikā. Tas var būt ļoti noderīgi, ja rakstzīmju ierobežojumi ir ierobežoti, piemēram, sociālo mediju biogrāfijās vai ziņojumu lodziņos.

Visbeidzot, aizmugursistēmas risinājums izmanto Express un Yup, lai apstiprinātu ievades garumu servera pusē, kas ir noderīgi papildu drošībai vai strādājot ar API galapunktiem. Serveris parsē ienākošos JSON datus, pārbauda tos saskaņā ar Yup shēmu un vai nu apstiprina veiksmīgu validāciju, vai arī atbild ar kļūdas ziņojumu. Šis validācijas slānis palīdz aizsargāties pret gadījumiem, kad klienta puses pārbaudes var tikt apietas, nodrošinot, ka neviena ievade nepārsniedz 250 rakstzīmes neatkarīgi no tā, no kurienes tā nāk. Slāņainās validācijas izmantošana gan priekšgalā, gan aizmugursistēmā ir labākā prakse drošai lietojumprogrammu izstrādei, jo tā nodrošina noturību pret apiešanas mēģinājumiem, padarot to par lielisku izvēli ražošanas vidēm. Tādā veidā, ja kāda klienta puses validācija netiek aktivizēta vai tiek apieta, aizmugursistēma joprojām uztver un apstrādā kļūdu, aizsargājot datu integritāti.

Iekļautās validācijas ieviešana reakcijas formā, izmantojot Formik, Yup un TypeScript

1. risinājums: reaģējiet uz priekšgala veidlapu, izmantojot apstiprinājumu rakstzīmju ierobežojumam

import React from 'react';
import { Field, Formik, Form, ErrorMessage } from 'formik';
import * as Yup from 'yup';
import TextField from '@material-ui/core/TextField';
// Define the validation schema with Yup, setting max length
const descriptionValidation = Yup.string()
  .max(250, 'Description cannot exceed 250 characters')
  .optional();
// Function component
const DescriptionForm = () => {
  return (
    <Formik
      initialValues={{ description: '' }}
      validationSchema={Yup.object({ description: descriptionValidation })}
      onSubmit={(values) => console.log('Submitted', values)}
    >
      {({ errors, touched, setFieldValue, setFieldTouched }) => (
        <Form>
          <Field
            as={TextField}
            name="description"
            label="Description"
            multiline
            rows={4}
            placeholder="Optional"
            error={Boolean(errors.description && touched.description)}
            helperText={
              errors.description && touched.description
                ? errors.description
                : 'Limit: 250 characters'
            }
            onChange={(event) => {
              const { value } = event.target;
              setFieldValue('description', value);
              if (value.length > 250) {
                setFieldTouched('description', true);
              }
            }}
          />
          <ErrorMessage name="description" component="div" className="error" />
        </Form>
      )}
    </Formik>
  );
};
export default DescriptionForm;

Alternatīva iekļauta validācija bez rekvizīta maxLength

2. risinājums: reaģējiet ar manuālu rakstzīmju garuma validāciju, nebloķējot ievadi

import React from 'react';
import { Field, Formik, Form, ErrorMessage } from 'formik';
import * as Yup from 'yup';
import TextField from '@material-ui/core/TextField';
// Yup schema for 250-character limit
const descriptionValidation = Yup.string()
  .max(250, 'Description cannot exceed 250 characters')
  .optional();
// Component definition
const DescriptionForm = () => {
  return (
    <Formik
      initialValues={{ description: '' }}
      validationSchema={Yup.object({ description: descriptionValidation })}
      onSubmit={(values) => console.log('Form Submitted:', values)}
    >
      {({ errors, touched, setFieldValue, setFieldTouched, values }) => (
        <Form>
          <TextField
            name="description"
            label="Description"
            multiline
            rows={4}
            placeholder="Optional"
            value={values.description}
            error={Boolean(errors.description && touched.description)}
            helperText={
              errors.description && touched.description
                ? errors.description
                : `Characters left: ${250 - values.description.length}`
            }
            onChange={(event) => {
              const { value } = event.target;
              if (value.length <= 250) {
                setFieldValue('description', value);
              } else {
                setFieldTouched('description', true);
              }
            }}
          />
          <ErrorMessage name="description" component="div" className="error" />
        </Form>
      )}
    </Formik>
  );
};
export default DescriptionForm;

Aizmugursistēmas validācija, izmantojot Express.js un Yup rakstzīmju ierobežojumam

3. risinājums: aizmugursistēmas validācija, izmantojot Node.js ar Express un Yup

const express = require('express');
const app = express();
const Yup = require('yup');
// Middleware for JSON parsing
app.use(express.json());
// Define Yup schema
const descriptionSchema = Yup.object().shape({
  description: Yup.string()
    .max(250, 'Description cannot exceed 250 characters')
    .optional(),
});
// POST route with validation
app.post('/submit', async (req, res) => {
  try {
    await descriptionSchema.validate(req.body);
    res.status(200).json({ message: 'Validation Passed' });
  } catch (error) {
    res.status(400).json({ error: error.message });
  }
});
// Server setup
app.listen(3000, () => console.log('Server running on port 3000'));

Inline validācijas metožu paplašināšana programmā Formik and React

Ieviešot iekļauto validāciju programmās React with Formik un Yup, viena alternatīva standarta onChange validācijai ir izmantot pielāgotas debounce funkcijas. Atceļot ievadi, varat aizkavēt validācijas pārbaudes, līdz lietotājs ir apturējis rakstīšanu uz noteiktu laiku, radot vienmērīgāku pieredzi. Tas var novērst validācijas kļūdu parādīšanos pārāk agri vai negaidīti, padarot to īpaši noderīgu, kad lietotāji ieraksta garas atbildes laukā ar lielu rakstzīmju skaita ierobežojumu. Izmantojot debounced onChange, izstrādātāji var samazināt nevajadzīgas pārbaudes, kas var uzlabot abus sniegumu un lietotāja pieredzi, īpaši lēnākām ierīcēm vai lielām formām. Iedomājieties, ka ierakstāt savu informāciju garā formā un redzat kļūdu ziņojumus, kas parādās tikai pēc pauzes, kas šķiet daudz mazāk traucējošs.

Vēl viena pieeja ietver Formik izmantošanu FieldArray dinamiskiem laukiem, kuriem varētu būt nepieciešama līdzīga pārbaude, piemēram, komentāru vai piezīmju saraksts, kur katram ir savs rakstzīmju ierobežojums. Izmantojot FieldArray, katra ievade var uzturēt savu neatkarīgo rakstzīmju skaitītāju un validācijas stāvokli, vienkāršojot sarežģītas formas. Varat iestatīt katru lauku, lai parādītu reāllaika validācijas ziņojumus, izmantojot Formik’s setFieldTouched un Yup maksimālais validators. Piemēram, ja lietotājiem ir jāpievieno vairākas īsas piezīmes, FieldArray ļauj ērti piemērot un pārvaldīt validācijas ierobežojumus katram ierakstam, parādot katrai piezīmei raksturīgās iekļautās kļūdas.

Dažos gadījumos Formik validācijas apvienošana ar vietējām JavaScript metodēm ļauj nodrošināt vēl detalizētāku kontroli. Piemēram, izmantojot substring metodi JavaScript, varat dinamiski apgriezt ievades tekstu vajadzīgajā garumā pirms validācijas aktivizētājiem. Šī metode ir ļoti noderīga, ja ir ļoti svarīgi, lai ievade atbilstu precīziem standartiem, piemēram, ierobežojot tvītu vai SMS garuma īsziņu ievadi. Apvienojot Formik ar JavaScript funkcijām, piemēram, apakšvirkni, izstrādātājiem ir plašākas iespējas kontrolēt gan lietotāja pieredzi, gan datu integritāti, nodrošinot, ka teksts vienmēr ir pieņemamās robežās bez manuālas rediģēšanas vai veidlapas atiestatīšanas.

Bieži uzdotie jautājumi par iekļauto validāciju pakalpojumā Formik un Yup

  1. Kāds ir galvenais lietošanas mērķis Formik ar Yup apstiprināšanai?
  2. Formik un Yup kombinācija vienkāršo veidlapu apstrādi un validāciju React lietojumprogrammās, īpaši lielākām formām vai formām ar sarežģītām validācijas vajadzībām. Formik pārvalda veidlapas stāvokli, bet Yup apstrādā validācijas shēmas.
  3. Kā dara setFieldTouched atšķiras no setFieldValue in Formik?
  4. setFieldTouched atjaunina lauka statusu “pieskarties”, atzīmējot to kā mijiedarbotu validācijas nolūkos, kamēr setFieldValue tieši atjaunina lauka vērtību. Kopā tie palīdz pārvaldīt, kad un kā notiek validācija.
  5. Vai es varu izmantot gan native maxLength un jā apstiprinājums?
  6. Izmantojot maxLength, tiek ierobežots ievades garums priekšpusē, taču tas var novērst Yup validācijas aktivizēšanu iekļautu kļūdu gadījumā. Ja ir nepieciešama iekļauta validācija, apsveriet iespēju noņemt maxLength un tā vietā paļauties uz Yup, izmantojot Formik's onChange apdarinātāju.
  7. Kāpēc es izmantotu FieldArray ar validāciju Formikā?
  8. FieldArray ļauj izstrādātājiem apstrādāt dinamiskas veidlapas, kurās vairāki lauki atbilst līdzīgiem validācijas noteikumiem, padarot to ideāli piemērotu tādu vienumu sarakstiem kā komentāri vai tagi, kur katram ierakstam ir noteiktas īpašas prasības.
  9. Kas ir debounce funkcija, un kāpēc to izmantot ar Formik validāciju?
  10. Atkāpšanās ir paņēmiens, kas aizkavē validāciju, līdz lietotājs ir apturējis rakstīšanu, tādējādi samazinot pārmērīgus validācijas zvanus. Tas ir īpaši noderīgi garākiem teksta laukiem, novēršot priekšlaicīgu validācijas ziņojumu saņemšanu, kas var novērst lietotāju uzmanību.
  11. Kāda ir paraugprakse vairāku lauku apstiprināšanai, izmantojot Yup?
  12. Izmantojiet Yup's object un array shēmas, lai definētu sarežģītu validāciju, un lietotu pielāgotus kļūdu ziņojumus, lai būtu skaidrs, kuri lauki neatbilst prasībām.
  13. Kā es varu dinamiski parādīt lietotājam atlikušās rakstzīmes?
  14. Izmantojot helperText Material-UI TextField komponents nodrošina reāllaika rakstzīmju skaita attēlošanu, kas var uzlabot lietojamību, palīdzot lietotājiem izsekot atlikušajai ievades jaudai.
  15. Vai aizmugursistēmas validācija var aizstāt priekšgala validāciju ar Yup?
  16. Aizmugursistēmas validācija ir ļoti svarīga datu integritātei, taču priekšgala validācija sniedz tūlītēju atgriezenisko saiti lietotājiem, uzlabojot viņu pieredzi. Abi ir ieteicami, lai dati tiktu apstrādāti droši un lietotājam draudzīgi.
  17. Kāda ir priekšrocība, noņemot maxLength atribūts iekļautajai validācijai?
  18. Noņemšana maxLength nodrošina Formik un Yup pilnīgu kontroli pār validācijas procesu, ļaujot parādīt iekļautās kļūdas, tiklīdz tiek pārsniegts rakstzīmju ierobežojums, tieši neierobežojot ievades garumu.

Pēdējās domas par tiešsaistes validāciju reāllaikā

Iekļautās validācijas ieviešana ar Formik un Yup nodrošina vienmērīgāku, interaktīvāku lietotāja pieredzi laukiem ar ierobežotu rakstzīmju skaitu. Noņemot maxLength un izmantojot Formik's setFieldTouched stratēģiski lietotāji var saņemt tūlītēju atgriezenisko saiti bez stingriem ierobežojumiem. Šī metode ir ideāli piemērota tādiem scenārijiem kā pieteikuma veidlapas vai biolauki.

Šī pieeja piedāvā elastību, un to var tālāk pielāgot, lai atbilstu konkrētām vajadzībām. Rakstzīmju ierobežojumu iekļautā validācija nodrošina datu konsekvenci un lietotājam draudzīgu pieredzi, jo īpaši, pārvaldot vairākus uz rakstzīmēm balstītus laukus. Apvienojot Formik, Yup un JavaScript, izstrādātāji var piedāvāt gan intuitīvu, gan stabilu validāciju lietotājiem. 🚀

Avoti un papildu informācija par iekļautajām validācijas metodēm
  1. Sniedz visaptverošu pārskatu par Formik un validācijas apstrādes metodes programmā React. Formik dokumentācija .
  2. Sīkāka informācija par lietošanu kā shēmas validācijas rīks, īpaši noderīgs ievades ierobežojumu pārvaldīšanai. Jā, GitHub repozitorijs .
  3. Apspriež paraugpraksi ieviešanai iekļauta validācija modernās priekšgala sistēmās, koncentrējoties uz React. Smashing Magazine: Form Validation UX .
  4. Izpēta dinamiskā lauka validāciju, izmantojot Formik’s setFieldTouched un kā to var izmantot iekļautajām kļūdām. ReactJS dokumentācija: veidlapas .