Blog-Logo auf schwarzem Grund mit dem Schriftzug "Discover What's Next in Tech!"

It’s #FrontendFriday – Formvalidierung in React mit Zod

Die Validierung von Formularen ist ein wichtiger Bestandteil jeder Frontend-Anwendung – sei es mit Angular, React oder anderen Frameworks. Sicherzustellen, dass Benutzereingaben korrekt und vollständig sind, ist sowohl für den User als auch für die Applikation selbst essenziell wichtig. Heute wollen wir insbesondere React-Anwendungen betrachten.

Eine effektive Möglichkeit, eine Formvalidierung in React durchzuführen, bietet hier die Bibliothek Zod [1]. Zod ist ein deklaratives Validierungsschema, das leichtgewichtig und einfach zu integrieren ist.

Vorteile von Zod für die Formvalidierung

  • Leichte Integration – Die Einrichtung und Integration in das entsprechende Formular ist schnell und einfach.
  • Hohe Flexibilität – Die Möglichkeiten zur Validierung einzelner Felder sind sehr umfangreich und auch custom Validierungen sind problemlos möglich.
  • Intuitive Nutzung – Die Nutzung ist leicht verständlich und nutzbar.

Integration von Zod in React

Um Zod in einem React-Projekt zu verwenden, müssen zunächst die entsprechenden npm-Pakete installiert werden:

npm install zod
npm install react-hook-form

Anschließend kann ein Formular validiert werden, indem ein Schema definiert und zur Validierung verwendet wird:

import { useState } from "react";
import { useForm } from 'react-hook-form';
import { z } from "zod";

const formSchema = z.object({
  name: z.string().min(2, { message: "Name muss mindestens 2 Zeichen lang sein." }),
  email: z.string().email({ message: "Ungültige E-Mail-Adresse." }),
  age: z.number().min(18, { message: "Mindestalter ist 18 Jahre." }),
  street: z.string().min(1, { message: "Ort muss mindestens 1 Zeichen lang sein." }),
  postcode: z.number().length(5, { message: "Die PLZ muss genau 5 Zeichen lang sein." }),
  city: z.string().min(1, { message: "Ort muss mindestens 1 Zeichen lang sein." }),
});

const MyFrontendFridayForm = () => {
  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm({
    resolver: zodResolver(formSchema),
  });

  const onSubmit = (data) => {
    console.log("Formulardaten sind gültig:", data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <div>
        <label>Name:</label>
        <input
          type="text"
          {...register("name")}
        />
        {errors.name && <p>{errors.name.message}</p>}
      </div>

      <div>
        <label>Email:</label>
        <input
          type="email"
          {...register("email")}
        />
        {errors.email && <p>{errors.email.message}</p>}
      </div>

      <div>
        <label>Alter:</label>
        <input
          type="number"
          {...register("age")}
        />
        {errors.age && <p>{errors.age.message}</p>}
      </div>

      <div> 
        <label>Straße und Hausnummer:</label>
        <input
          type="text"
          {...register("street")}
        /> 
        {errors.street && <p>{errors.street.message}</p>} 
      </div>

      <div> 
        <label>PLZ:</label> 
        <input 
          type="number"
          {...register("postcode")}
        />
        {errors.postcode && <p>{errors.postcode.message}</p>}
      </div>

      <div> 
        <label>Ort:</label>
        <input 
          type="text" 
          {...register("city")}
        />
        {errors.city && <p>{errors.city.message}</p>}
      </div>
      <button type="submit">Absenden</button>
    </form>
  );
};

export default MyFrontendFridayForm;

In den Zeilen 5-12 wird ein Schema angelegt, inkl. Validierungskriterien und Fehlermeldungen. Anschließend wird die Form initialisiert und ab Zeile 27 erfolgt die Darstellung. Und schon ist das Formular mit unterschiedlichen Validierungen implementiert. 

Fazit

Zod ist ein leistungsfähiges Tool zur Formvalidierung in React. Es bietet eine elegante Syntax, die sich nahtlos in React-Projekte integrieren lässt. Besonders in Kombination mit TypeScript ist Zod eine hervorragende Wahl, um robuste und eine sichere Formvalidierung zu gewährleisten.

 

 

Quellen:

[1]: Zod

[2]: DEV- Validating forms in React Apps with Zod

[3]: freeCodeCamp – How to Validate Forms with Zod and React-Hook-Form

 

 

Dominik Sasse

Über MICH

Dominik Sasse hat Wirtschaftsinformatik (B.Sc.) studiert und arbeitet seit 2019 als Software Developer bei doubleSlash. Seine Schwerpunkte liegen im Bereich der Frontend-Entwicklung mit Angular und der Datenvisualisierung mit PowerBI.

Alle Beiträge von Dominik Sasse

Mehr erfahren

Weitere Infos auf unserer Website und in unserem Newsletter

Pfeil hoch