„Yup“ ir „Formik“ naudojimas eilutinio simbolių apribojimo patvirtinimui „React“ formose įdiegti

Validation

Įvaldykite tiesioginį simbolių apribojimų patvirtinimą Formik formose

Darbas su formomis dažnai gali apimti tikslių patvirtinimo taisyklių valdymą, ypač naudojant tokias bibliotekas kaip ir . Vienas iš dažniausiai pasitaikančių scenarijų, su kuriais susiduria kūrėjai, yra įvesties laukų simbolių apribojimas, pvz., aprašų ar teksto sričių apribojimas iki 250 simbolių.

Nors pridėti maksimalų simbolių limitą atrodo nesudėtinga, gali kilti problemų įgalinti eilutes patvirtinimo klaidas, kai šis limitas viršijamas. Pavyzdžiui, standartinės HTML ypatybės, pvz., maxLength, neleidžia vartotojams rašyti virš ribos, tačiau tai apeina , kuriai reikia užregistruoti 251 simbolį, kad suaktyvintų klaidos pranešimą.

Tokiose situacijose gali būti sudėtinga rasti tinkamą pusiausvyrą tarp įvesties blokavimo ir grįžtamojo ryšio realiuoju laiku teikimo. Naudojant sprendimus, pvz., papildomų apribojimų nustatymą arba pasitikėjimą lauko suliejimo įvykiais, klaidų tvarkymas dažnai tampa ne toks jautrus arba neintuityvus.

Šiame vadove išnagrinėsime metodą, kaip nedelsiant atlikti tiesioginį patvirtinimą nepasikliaujant maksimalus ilgis. Naudojant su , įgalinsime tinkintas patvirtinimo taisykles, kurios rodo tiesioginį klaidos pranešimą, kai viršijamas simbolių limitas, todėl naudotojai galės naudotis sklandžiai. 🚀

komandą Naudojimo pavyzdys
setFieldValue Naudojamas programiškai atnaujinti konkretaus formos lauko reikšmę Formik. Čia jis dinamiškai atnaujina aprašo lauką, kai įvedami simboliai, todėl realiuoju laiku galima skaičiuoti simbolius.
setFieldTouched Ši komanda rankiniu būdu nustato formos lauko „paliestą“ būseną. Šiame scenarijuje jis suaktyvinamas, kai simbolių skaičius viršija 250, o tai įgalina patvirtinimo grįžtamąjį ryšį, nereikalaujant, kad vartotojas sulietų įvesties lauką.
validationSchema Nurodo „Yup“ patvirtinimo taisykles „Formik“. Čia jis įgyvendina 250 simbolių apribojimą, integruodamas aprašymo patvirtinimo schemą tiesiai į formos konfigūraciją.
Yup.string().max() Yup patvirtinimo metodas, skirtas nustatyti maksimalaus ilgio apribojimą eilutėms. Šiame scenarijuje aprašo laukas apribojamas iki 250 simbolių, o viršijus rodoma klaida.
ErrorMessage Rodo tiesioginius klaidų pranešimus Formik, kai patvirtinimas nepavyksta. Čia jis naudoja „Formik“ klaidų apdorojimą, kad pranešimai būtų nedelsiant rodomi, jei viršijamas simbolių limitas.
inputProps Apibrėžia papildomus TextField atributus Material-UI. Ši komanda nustato ypatybes, pvz., didžiausią eilučių skaičių arba simbolių apribojimus, turinčius įtakos lauko veikimui ir išvaizdai.
express.json() „Express.js“ tarpinė programinė įranga, kuri analizuoja gaunamus JSON naudingus krovinius. Užpakalinio patvirtinimo scenarijuje ši komanda įgalina serverį išanalizuoti ir tvarkyti JSON duomenis req.body.
descriptionSchema.validate() Taiko Yup patvirtinimo taisykles serverio pusėje. Užpakaliniame scenarijuje jis patikrina gaunamus duomenis pagal simbolių apribojimą ir siunčia atsakymą, pagrįstą patvirtinimo sėkme ar nesėkme.
helperText Medžiagos vartotojo sąsajos ypatybė teksto lauke, leidžianti pasirinktinius pagalbinio pranešimus po lauku. Tokiu atveju rodomas likęs simbolių skaičius arba patvirtinimo klaidos, o tai pagerina vartotojo patirtį.
ErrorMessage component="div" Naudojamas Formik klaidų pranešimų pateikimui tinkinti. Nustačius ją į div, ši komanda valdo patvirtinimo pranešimų formatą ir išvaizdą.

Tiesioginio patvirtinimo įgyvendinimas naudojant „Formik“ ir „Yup“, kad gautumėte atsiliepimų realiuoju laiku

Čia pateikiami „React“ scenarijai skirti realiuoju laiku atlikti tiesioginį patvirtinimą tik simboliais apribotame teksto lauke „Formik“ formoje. Ši sąranka naudoja lengvam formų tvarkymui ir patvirtinimo schemai apibrėžti. Pagrindinis iššūkis slypi tame, kad standartiniai HTML įvesties atributai, tokie kaip maxLength, neleidžia vartotojams tiesiogiai viršyti simbolių limito, o tai neleidžia mums suaktyvinti „Yup“ patvirtinimo. Taigi vietoj to programiškai patikriname simbolių skaičių ir atnaujiname „Formik“. būsena, jei riba viršyta. Šis metodas leidžia vartotojams matyti patvirtinimo pranešimus iškart, kai pasiekia 251 simbolį, o ne laukti, kol jie paliks lauką. 🚀

Pirmasis scenarijus demonstruoja metodą, kai Formik's ir komandos naudojamos įvesties elgesiui valdyti. Čia, vartotojui įvedant tekstą, „Formik“ onChange tvarkyklė dinamiškai atnaujina lauką, leidžiantį simbolių skaičiui padidėti iki 251. Kai skaičius viršija 250, suaktyvinamas setFieldTouched, kad laukas būtų pažymėtas kaip „paliestas“, o tai suaktyvina „Yup“ patvirtinimą, ir pateikiamas klaidos pranešimas. Šis neatidėliotinas grįžtamasis ryšys yra labai svarbus siekiant užtikrinti, kad vartotojai būtų nedelsiant informuoti, pagerinant naudojimą ir sumažinant klaidų skaičių. Įsivaizduokite, kad pildote internetinę paraišką, kurioje tiesioginis atsiliepimas padės sužinoti, ar reikia redaguoti atsakymą, nelaukiant pateikimo klaidos. 👍

Antrasis metodas visiškai pašalina atributą maxLength, pasikliaujant tik programiniu simbolių skaičiaus patvirtinimu. Šioje versijoje įvykių apdorojimo priemonė onChange atlieka aktyvų vaidmenį užtikrindama, kad jei simbolių skaičius yra mažesnis arba lygus 250, lauko reikšmė būtų atnaujinama įprastai. Jei įvestis pasiekia 251 simbolio slenkstį, įvestis neblokuoja papildomo simbolio, o pažymi lauką kaip paliestą. Tai užtikrina sklandų spausdinimą be griežtų apribojimų, o tai suteikia švelnesnį būdą valdyti perpildymą. HelperText taip pat veikia kaip tiesioginis simbolių skaitiklis, padedantis vartotojams sekti likusius simbolius vedant, o tai gali būti labai naudinga, kai simbolių apribojimai yra griežti, pvz., socialinės žiniasklaidos bios arba pranešimų laukeliuose.

Galiausiai, užpakalinis sprendimas naudoja Express ir Yup, kad patvirtintų įvesties ilgį serverio pusėje, o tai yra naudinga siekiant užtikrinti papildomą saugumą arba dirbant su API galutiniais taškais. Serveris analizuoja gaunamus JSON duomenis, patvirtina juos pagal Yup schemą ir patvirtina sėkmingą patvirtinimą arba atsako klaidos pranešimu. Šis patvirtinimo sluoksnis padeda apsisaugoti nuo atvejų, kai gali būti apeinamos kliento pusės patikros, užtikrinant, kad jokia įvestis neviršytų 250 simbolių, nepaisant to, iš kur ji gaunama. Sluoksniuoto patvirtinimo naudojimas tiek priekinėje, tiek užpakalinėje sistemoje yra geriausia saugios taikomųjų programų kūrimo praktika, nes tai užtikrina atsparumą apėjimo bandymams, todėl tai puikus pasirinkimas gamybinėje aplinkoje. Tokiu būdu, jei nepavyksta suaktyvinti kliento patvirtinimo arba jis apeinamas, užpakalinė programa vis tiek užfiksuos ir apdoros klaidą, apsaugodama duomenų vientisumą.

Inline patvirtinimo įgyvendinimas reakcijos formoje naudojant „Formik“, „Yup“ ir „TypeScript“.

1 sprendimas: sureaguokite į Frontend formą su simbolių apribojimo patvirtinimu

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;

Alternatyvus tiesioginis patvirtinimas be maxLength ypatybės

2 sprendimas: reaguokite naudodami rankinį simbolio ilgio patvirtinimą, neblokuodami įvesties

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;

Backend patvirtinimas naudojant Express.js ir Yup simbolių limitui

3 sprendimas: Backend patvirtinimas naudojant Node.js su Express ir 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'));

„Formik and React“ tiesioginio patvirtinimo metodų išplėtimas

Diegiant tiesioginį patvirtinimą „React with Formik“ ir „Yup“, viena alternatyva standartiniam „onChange“ patvirtinimui yra naudoti pasirinktines debounce funkcijas. Atnaujinus įvestį, galite atidėti patvirtinimo patikras, kol vartotojas pristabdys spausdinimą nustatytam laikui, taip sukurdami sklandesnę patirtį. Tai gali užkirsti kelią patvirtinimo klaidoms atsirasti per anksti arba netikėtai, todėl tai ypač naudinga, kai vartotojai įveda ilgus atsakymus lauke su dideliu simbolių apribojimu. Naudodami debounced onChange, kūrėjai gali sumažinti nereikalingų patvirtinimų skaičių, o tai gali pagerinti abu ir naudotojo patirtį, ypač lėtesniuose įrenginiuose ar didelėse formose. Įsivaizduokite, kad įvedėte savo informaciją į ilgą formą ir klaidų pranešimai pasirodo tik po to, kai pristabdote, o tai atrodo daug mažiau blaškanti.

Kitas metodas apima „Formik“ naudojimą dinaminiams laukams, kuriems gali prireikti panašių patvirtinimų, pvz., komentarų ar pastabų sąrašui, kur kiekvienas turi savo simbolių apribojimą. Naudojant FieldArray, kiekviena įvestis gali išlaikyti savo nepriklausomą simbolių skaitiklį ir patvirtinimo būseną, supaprastinant sudėtingas formas. Galite nustatyti kiekvieną lauką, kad būtų rodomi patvirtinimo pranešimai realiuoju laiku naudodami Formik's ir Yup maksimalus tikrintuvas. Pavyzdžiui, jei naudotojams reikia pridėti kelias trumpas pastabas, „FieldArray“ leidžia lengvai pritaikyti ir valdyti kiekvieno įrašo patvirtinimo apribojimus, parodydama kiekvienos pastabos eilutes.

Kai kuriais atvejais Formik patvirtinimo derinimas su vietiniais JavaScript metodais leidžia valdyti dar detaliau. Pavyzdžiui, naudojant „JavaScript“ metodą, galite dinamiškai apkarpyti įvesties tekstą iki reikiamo ilgio prieš patvirtinimo suaktyvinimą. Šis metodas yra labai naudingas, kai labai svarbu, kad įvestis atitiktų tikslius standartus, pvz., ribojant tviterinių pranešimų arba SMS žinučių įvestį. Sujungę „Formik“ su „JavaScript“ funkcijomis, tokiomis kaip poeilutė, kūrėjai turi daugiau galimybių valdyti vartotojo patirtį ir duomenų vientisumą, užtikrindami, kad tekstas visada būtų priimtinose ribose be rankinio redagavimo ar formos nustatymo iš naujo.

  1. Koks yra pagrindinis naudojimo tikslas su Yup patvirtinimui?
  2. „Formik“ ir „Yup“ derinys supaprastina formų tvarkymą ir patvirtinimą „React“ programose, ypač didesnėms formoms arba formoms, kurioms reikia sudėtingų patvirtinimo poreikių. „Formik“ valdo formos būseną, o „Yup“ – patvirtinimo schemas.
  3. Kaip veikia skiriasi nuo Formikoje?
  4. atnaujina lauko būseną „liestas“, pažymėdamas jį kaip sąveikaujantį patvirtinimo tikslais tiesiogiai atnaujina lauko reikšmę. Kartu jie padeda valdyti, kada ir kaip atliekamas patvirtinimas.
  5. Ar galiu naudoti abu vietinius ir taip patvirtinimas?
  6. Naudojant maxLength ribojamas įvesties ilgis priekinėje dalyje, tačiau gali būti, kad „Yup“ patvirtinimas nebūtų suaktyvintas dėl įterptųjų klaidų. Jei reikalingas tiesioginis patvirtinimas, apsvarstykite galimybę pašalinti „maxLength“ ir pasikliauti „Yup“ su „Formik's onChange“ tvarkykle.
  7. Kodėl turėčiau naudoti su patvirtinimu Formik?
  8. leidžia kūrėjams tvarkyti dinamines formas, kuriose keli laukai atitinka panašias patvirtinimo taisykles, todėl idealiai tinka elementų, pvz., komentarų ar žymų, sąrašams, kur kiekvienas įrašas turi specifinius reikalavimus.
  9. Kas yra debounce funkcija ir kodėl ją naudoti su Formik patvirtinimu?
  10. Atšaukimas yra metodas, kuris atitolina patvirtinimą, kol vartotojas pristabdo spausdinimą, sumažindamas per daug tikrinimo skambučius. Tai ypač naudinga ilgesniems teksto laukams, užkertant kelią priešlaikiniams patvirtinimo pranešimams, kurie gali atitraukti vartotojus.
  11. Kokia yra geriausia kelių laukų patvirtinimo su „Yup“ praktika?
  12. Naudokite Yup's ir schemos, skirtos apibrėžti sudėtingą patvirtinimą, ir pritaikyti pasirinktinius klaidų pranešimus, kad būtų aišku, kurie laukai neatitinka reikalavimų.
  13. Kaip galiu dinamiškai parodyti likusius simbolius vartotojui?
  14. Naudojant Material-UI TextField komponentas leidžia realiuoju laiku rodyti simbolių skaičių, o tai gali pagerinti naudojimą, nes padeda vartotojams stebėti likusią įvesties talpą.
  15. Ar gali backend patvirtinimas pakeisti frontend patvirtinimą į Yup?
  16. Užpakalinės sistemos patvirtinimas yra labai svarbus duomenų vientisumui užtikrinti, tačiau priekinės sistemos patvirtinimas suteikia vartotojams tiesioginį grįžtamąjį ryšį, pagerindamas jų patirtį. Abu rekomenduojami, kad duomenys būtų tvarkomi saugiai ir patogiai.
  17. Koks yra pašalinimo pranašumas atributas tiesioginiam patvirtinimui?
  18. Pašalinimas suteikia „Formik“ ir „Yup“ visišką tikrinimo proceso kontrolę, leidžiančią rodyti eilutes klaidas, kai tik viršijamas simbolių limitas, tiesiogiai neribojant įvesties ilgio.

Įdiegus tiesioginį patvirtinimą naudojant „Formik“ ir „Yup“, naudotojo patirtis yra sklandesnė, interaktyvesnė naudojant ribotus simbolius. Pašalinus ir naudojant Formik's strategiškai vartotojai gali gauti tiesioginį grįžtamąjį ryšį, netrukdomi griežtų apribojimų. Ši technika idealiai tinka tokiems scenarijams kaip paraiškos formos ar biologiniai laukai.

Šis metodas suteikia lankstumo ir gali būti toliau pritaikytas, kad atitiktų konkrečius poreikius. Tiesioginis simbolių apribojimų patvirtinimas užtikrina duomenų nuoseklumą ir patogią patirtį, ypač tvarkant kelis simboliais pagrįstus laukus. Sujungdami „Formik“, „Yup“ ir „JavaScript“, kūrėjai gali pasiūlyti intuityvų ir patikimą naudotojų patvirtinimą. 🚀

  1. Pateikiama išsami apžvalga ir patvirtinimo apdorojimo metodai React. Formik dokumentacija .
  2. Išsami informacija apie naudojimą kaip schemos patvirtinimo įrankis, ypač naudingas valdant įvesties apribojimus. Taip, „GitHub“ saugykla .
  3. Aptaria geriausią įgyvendinimo praktiką šiuolaikinėse priekinės sistemos sistemose, daugiausia dėmesio skiriant „React“. Smashing Magazine: formos patvirtinimo UX .
  4. Tyrinėja dinaminio lauko patvirtinimą su Formik's ir kaip jis gali būti taikomas įterptoms klaidoms. ReactJS dokumentacija: formos .