Wie füge ich dem Formular in meiner React-Komponente eine Validierung hinzu?

Lesezeit: 6 Minuten

Benutzer-Avatar
Hulk1991

Das Formular meiner Kontaktseite sieht wie folgt aus:

<form name="contactform" onSubmit={this.contactSubmit.bind(this)}>
  <div className="col-md-6">
    <fieldset>
      <input ref="name" type="text" size="30" placeholder="Name"/>
      <br/>
      <input refs="email" type="text" size="30" placeholder="Email"/>
      <br/>
      <input refs="phone" type="text" size="30" placeholder="Phone"/>
      <br/>
      <input refs="address" type="text" size="30" placeholder="Address"/>
      <br/>
    </fieldset>
  </div>
  <div className="col-md-6">
    <fieldset>
      <textarea refs="message" cols="40" rows="20"
                className="comments" placeholder="Message"/>
    </fieldset>
  </div>
  <div className="col-md-12">
    <fieldset>
      <button className="btn btn-lg pro" id="submit"
              value="Submit">Send Message</button>
    </fieldset>
  </div>
</form>

Validierung muss für alle Felder hinzugefügt werden. Kann mir jemand helfen, eine Validierung in diesem Reaktionsformular hinzuzufügen?

  • Was sind die Validierungsregeln? Darf nicht leer sein, Zeichenbegrenzung oder so. Wenn Sie hinzufügen, kann ich helfen.

    – FurkanO

    23. Dezember 2016 um 7:03 Uhr

  • @FurkanO Name – Kann nicht leer sein und nur Buchstaben, E-Mail – kann nicht leer sein und gültig sein, Telefon – kann nicht leer sein, Limit von 10 und nur Zahlen, Adresse und Nachricht – kann nicht leer sein

    – Hulk1991

    23. Dezember 2016 um 7:05 Uhr

  • Dafür gibt es ein Paket: Reaktionsform.

    – Rishat

    23. Dezember 2016 um 7:09 Uhr

  • Dieses Paket kann helfen React-jsonschema-form-validation. Es verwendet ein leistungsstarkes JSON-Schema, um Daten zu beschreiben.

    – Hugo Hammer

    23. Juli 2019 um 9:53 Uhr

Benutzer-Avatar
Yash Marmat

Versuchen Sie dies, die erforderliche Eigenschaft im Eingabe-Tag unten stellt beispielsweise sicher, dass das Namensfeld nicht leer gesendet werden sollte.

<input type="text" placeholder="Your Name" required />

  • Ich weiß nicht, warum noch niemand dafür gestimmt hat. Es verwendet einfache und einfache integrierte HTML-Funktionen, um das zu tun, worum OP gebeten hat. Wenn es mehr zu validieren gibt, als zu prüfen, ob das erforderliche Feld ausgefüllt ist, dann scheint die andere Antwort angemessen, aber in diesem Fall eine einfache required Prop ist genau das, was benötigt wird.

    – Meter

    3. Juni 2021 um 8:42 Uhr


  • Diese Antwort ist perfekt, wie sie ist

    – Artjom Ptuschkin

    5. Februar um 16:26 Uhr

  • Wie aktivieren/deaktivieren wir die Senden-Schaltfläche basierend darauf?

    – Gel

    12. März um 19:07 Uhr


  • @Gel Wenn das Eingabe-Tag in das Formularelement eingeschlossen ist, wird die Einschränkung des Formularverhaltens berücksichtigt. Für die Deaktivierungslogik habe ich einen einfachen Code für Sie codesandbox.io/s/simple-form-in-react-026bel

    – Yash Marmat

    14. März um 4:14

  • das ist einfach danke! @Jash

    – Gel

    14. März um 16:35 Uhr

Vorausgesetzt, Sie kennen sich mit reagieren aus useState HookWenn Ihr Formular einfach ist, können Sie verwenden state Variablen, die den Wert jedes Eingabefelds enthalten. Dann füge hinzu onChange Handler-Funktion für jedes Eingabefeld, die Zustandsvariablen aktualisiert. Am Ende können Sie die in Zustandsvariablen gespeicherten Werte überprüfen, um sicherzustellen, dass alle Eingabefelder einen Wert hatten. Hier ist ein einfaches Beispiel.

import { useState } from "react";

export default function App() {
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const onChangeHandler = (fieldName, value)=>{
    if(fieldName === "name"){
      setName(value);
    }
    else if(fieldName==="email"){
      setEmail(value);
    }
  }
  const onSubmitHandler = (e)=>{
    e.preventDefault();
    if(name.trim()==="" || email.trim() ==""){
      alert("required both field");
    }
    else{
      alert(name+" " +email);
      setName("");
      setEmail("");
    }
  }
  return (
    <div className="App">
      <form onSubmit={(e)=>{onSubmitHandler(e)}}>
        <input type="text" value={name} onChange={(e)=>{ onChangeHandler("name",e.target.value)}} /> <br/>
         <input type="email"  value={email} onChange={(e)=>{ onChangeHandler("email",e.target.value)}} /> <br/>
         <input type="submit" value="Submit" />
        </form>
    </div>
  );
}

Wenn Sie jedoch ein komplexes Formular haben, ist es schwierig, jeden Wert in Zustandsvariablen zu behalten und dann die Validierung für jedes Feld zu verwenden. Für komplexe Formulare wird die Verwendung empfohlen Formik das wird alles für Sie tun und Sie verwenden können Jep Validierungspaket, das auch von unterstützt wird Formik Dadurch können Sie mehr als nur eine einfache Validierung hinzufügen.

Mit React Hook wird Form super einfach (React Hook Form: https://github.com/bluebill1049/react-hook-form)

Ich habe Ihr HTML-Markup wiederverwendet.

import React from "react";
import useForm from 'react-hook-form';

function Test() {
  const { useForm, register } = useForm();
  const contactSubmit = data => {
    console.log(data);
  };

  return (
    <form name="contactform" onSubmit={contactSubmit}>
      <div className="col-md-6">
        <fieldset>
          <input name="name" type="text" size="30" placeholder="Name" ref={register} />
          <br />
          <input name="email" type="text" size="30" placeholder="Email" ref={register} />
          <br />
          <input name="phone" type="text" size="30" placeholder="Phone" ref={register} />
          <br />
          <input name="address" type="text" size="30" placeholder="Address" ref={register} />
          <br />
        </fieldset>
      </div>
      <div className="col-md-6">
        <fieldset>
          <textarea name="message" cols="40" rows="20" className="comments" placeholder="Message" ref={register} />
        </fieldset>
      </div>
      <div className="col-md-12">
        <fieldset>
          <button className="btn btn-lg pro" id="submit" value="Submit">
            Send Message
          </button>
        </fieldset>
      </div>
    </form>
  );
}

Ich habe Ihren Code genommen und ihn mit der Bibliothek angepasst Formular-mit-Einschränkungen reagieren: https://codepen.io/tkrotoff/pen/LLraZp

const {
  FormWithConstraints,
  FieldFeedbacks,
  FieldFeedback
} = ReactFormWithConstraints;

class Form extends React.Component {
  handleChange = e => {
    this.form.validateFields(e.target);
  }

  contactSubmit = e => {
    e.preventDefault();

    this.form.validateFields();

    if (!this.form.isValid()) {
      console.log('form is invalid: do not submit');
    } else {
      console.log('form is valid: submit');
    }
  }

  render() {
    return (
      <FormWithConstraints
        ref={form => this.form = form}
        onSubmit={this.contactSubmit}
        noValidate>

        <div className="col-md-6">
          <input name="name" size="30" placeholder="Name"
                 required onChange={this.handleChange}
                 className="form-control" />
          <FieldFeedbacks for="name">
            <FieldFeedback when="*" />
          </FieldFeedbacks>

          <input type="email" name="email" size="30" placeholder="Email"
                 required onChange={this.handleChange}
                 className="form-control" />
          <FieldFeedbacks for="email">
            <FieldFeedback when="*" />
          </FieldFeedbacks>

          <input name="phone" size="30" placeholder="Phone"
                 required onChange={this.handleChange}
                 className="form-control" />
          <FieldFeedbacks for="phone">
            <FieldFeedback when="*" />
          </FieldFeedbacks>

          <input name="address" size="30" placeholder="Address"
                 required onChange={this.handleChange}
                 className="form-control" />
          <FieldFeedbacks for="address">
            <FieldFeedback when="*" />
          </FieldFeedbacks>
        </div>

        <div className="col-md-6">
          <textarea name="comments" cols="40" rows="20" placeholder="Message"
                    required minLength={5} maxLength={50}
                    onChange={this.handleChange}
                    className="form-control" />
          <FieldFeedbacks for="comments">
            <FieldFeedback when="*" />
          </FieldFeedbacks>
        </div>

        <div className="col-md-12">
          <button className="btn btn-lg btn-primary">Send Message</button>
        </div>
      </FormWithConstraints>
    );
  }
}

Bildschirmfoto:

Screenshot der Formularvalidierung

Dies ist ein schneller Hack. Eine richtige Demo finden Sie unter https://github.com/tkrotoff/react-form-with-constraints#examples

1010200cookie-checkWie füge ich dem Formular in meiner React-Komponente eine Validierung hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy