
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?

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 />
Vorausgesetzt, Sie kennen sich mit reagieren aus useState Hook
Wenn 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:

Dies ist ein schneller Hack. Eine richtige Demo finden Sie unter https://github.com/tkrotoff/react-form-with-constraints#examples
10102000cookie-checkWie füge ich dem Formular in meiner React-Komponente eine Validierung hinzu?yes
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