Wie kann eine Fehlermeldung aus der benutzerdefinierten Hook-Validierung korrekt angezeigt werden?

Darin George

Ich habe ein mehrstufiges Formular. Derzeit erhält die übergeordnete Komponente die Statusdaten über Requisiten, die an die Formularkomponenten weitergegeben werden. Die Schaltfläche "Senden" befindet sich in der übergeordneten Komponente. Dies funktioniert und die Schritte funktionieren. Wenn Sie jedoch auf ein Eingabefeld klicken und den Fokus verlieren, wird die Fehlermeldung für jedes Feld in der mehrstufigen Form ausgelöst, anstatt dass das Feld, das den Fehler ausgelöst hat, das einzige Feld mit dem Fehler ist. Ich benutze die errorRequisite von <TextField/>, um die Fehlervisualisierung für den Benutzer auszulösen. Die Felder werden auch in validiert validateAuth.jsund Werte werden in verarbeitet useFormValidation.js. Ich bin auch beim Senden der Benutzeranmeldeformulardaten aus dem Status der übergeordneten Komponenten von einer Übermittlungsschaltfläche innerhalb der übergeordneten Komponente festgefahren.

Ich habe bereits versucht, Fehler = {Fehler} zu setzen und if-Anweisungen in useEffect-Hooks wie z

React.useEffect(() => {
  if (props.errors) {
    setErr(true)
  }
}, [err, props.errors]);

Dies führte jedoch dazu, dass meine gesamte Seite mit Fehlern geladen wurde, die ohne Benutzereingabe angezeigt wurden.

Hier ist eine Code-Sandbox mit einer Ähnlichkeit zu meiner genauen Entwicklung.

Code ist der gleiche, nur vereinfacht mit dem Nötigsten.

https://codesandbox.io/s/hooks-custom-authentication-final-8ldcw

Erwartete Ergebnisse: Das mehrstufige Formular wird geladen und überprüft die Felder jedes Mal, wenn der Benutzer versucht, mit dem nächsten Schritt fortzufahren, indem es auf Weiter klickt. Wenn ein Fehler vorliegt, zeigen Sie das Feld, das den Fehler verursacht hat, nur in Rot an und zeigen Sie den Fehlertext über material-ui an Hilfetext. Der Benutzer sollte nicht in der Lage sein, mit dem nächsten Schritt fortzufahren, wenn in einem Eingabefeld innerhalb dieses Schritts ein Fehler auftritt. Wenn ein Feld einen Fehler anzeigt, bleiben die übrigen Felder, die nicht fehlerhaft waren, in ihrem normalen, nicht fehlerhaften Zustand. Im letzten Schritt sendet die Schaltfläche Überprüfen Benutzerdaten zur Anmeldung.

Tatsächlich: Bei einem Formular werden alle Felder fehlerhaft angezeigt, sobald auf ein Eingabefeld geklickt wird. Der Benutzer klickt dann auf eine andere Stelle und das Feld verliert den Fokus. Benutzer können unabhängig von Fehlern frei durch die Anmeldeschritte klicken.

Nicky Prabowo

Wenn Sie Ihre überprüfen validateAuth.js, überprüft dieser Code alle Eingaben als Ganzes. Wenn Sie diese Funktion zum ersten Mal aufrufen, sind alle Eingabewerte leer. Deshalb haben Sie bei allen Eingaben den Fehler erhalten. Ich denke, diese Art von Code ist geeignet, wenn Sie alle Eingaben auf derselben Seite haben und überprüfen, wenn die Senden-Taste gedrückt wird. In Ihrem Fall sollten Sie jedoch Ihre Validierung ändern, um den individuellen Eingabewert wie diesen zu überprüfen

export default function validateAuth(input) {
 let errors = {};
 switch (input.key) {
 case "email": {
  if (!input.value) {
    errors.email = "Required Email";
  } else if (
    !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(input.value)
  ) {
    errors.email = "Invalid email address";
  }
  return errors;
 }
 case "password": {
  if (!input.value) {
    errors.password = "Required Password";
  } else if (input.value.length < 6) {
    errors.password = "Password must be at least 6 characters";
  }
  return errors;
 }
 case "username": {
  if (!input.value) {
    errors.username = "Required Username";
  } else if (input.value.length < 6) {
    errors.username = "Username must be 6-12 characters";
  }
  return errors;
 }
 case "verify": {
  if (!input.value) {
    errors.verify = "Required Verification";
  } else if (input.value.length < 1) {
    errors.verify = "Please input the 4 digit code.";
  }
  return errors;
 }
 default:
   return errors;
 }
}

Dann sollten Sie auch Ihre handleBlurFunktion ändern , um nur einen einzigen Eingabewert zu senden

function handleBlur(e) {
 const { name, value } = e.target;
 const input = {
  key: name,
  value
 };
 const validationErrors = validate(input);
 setErrors({
  ...errors,
  ...validationErrors
 });
}

Anschließend sollten Sie ein Fehlerobjekt überprüfen, um die nächste Schaltfläche zu aktivieren / deaktivieren

Edits bearbeiten Benutzerdefinierte Authentifizierung endgültig

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie kann ein Array mit Objekten (aus einer anderen Datei) auf der Reaktionsseite korrekt angezeigt werden?

Wie kann eine Fehlermeldung mit IValidatableObject in WPF angezeigt werden?

SwiftUI: Wie kann eine versteckte UITabBar in der Ansicht korrekt angezeigt werden?

Wie kann eine Zukunft innerhalb einer Zeile korrekt angezeigt werden?

Die Fehlermeldung aus der benutzerdefinierten Validierung von Yup verschwindet nicht

Wie kann eine benutzerdefinierte Fehlermeldung auf der Seite "Vergessenes Kennwort" von Azure B2C angezeigt werden?

Wie kann eine Flash-Fehlermeldung angezeigt werden, wenn der Download in web2py fehlgeschlagen ist?

JQuery-Validierung - Wie kann der Formularfeldwert in der "Remote" -Methode korrekt abgerufen werden?

Wie kann eine Mischung aus benutzerdefinierten Zeichenfolgentypen verhindert werden?

Wie werden Nachrichten in der Konsole korrekt angezeigt?

OctoberCMS: Wie kann eine benutzerdefinierte Fehlermeldung angezeigt werden, wenn eine eindeutige Einschränkung verletzt wird?

Wie kann in Ajax die Validierung der Eingabe angezeigt werden, mit der der Benutzer interagiert?

wie Kommentare aus benutzerdefinierten Funktionen angezeigt werden

Wie kann nur der Beschreibungsteil der Twilio-Fehlermeldung angezeigt werden?

Wie kann eine Methode der Host- oder übergeordneten Komponente aus einer dynamisch hinzugefügten Komponente korrekt aufgerufen werden?

Wie kann das ungültige Datum in Winkel mithilfe der benutzerdefinierten Validierung validiert werden?

Wie kann eine benutzerdefinierte Fehlermeldung in Specs2 (Scala) angezeigt werden?

Wie kann eine Fehlermeldung anstelle einer Java-Ausnahme angezeigt werden?

Wie kann ein Ereignis verhindert werden, wenn eine Fehlermeldung angezeigt wird?

Wie kann eine Fehlermeldung in einem Json mithilfe von ResponseStatusException beim Spring-Start angezeigt werden?

Wie kann eine Fehlermeldung für einen bestimmten Zeitraum in ReactJS angezeigt werden?

Wie kann eine Fehlermeldung angezeigt werden, wenn ein Name in einer Datei in C nicht verfügbar ist?

Wie kann eine Fehlermeldung angezeigt werden, wenn ein Notenrechner in JavaScript verwendet wird?

native reagieren: Wie kann ein bestimmtes Element aus dem Objekt korrekt angezeigt werden?

Der Bildpfad aus dem PHP-Array kann nicht korrekt angezeigt werden

Wie kann die mvn-Installation fehlschlagen, wenn bei der POM-Validierung Warnungen angezeigt werden?

Wie kann eine Fehlermeldung angezeigt werden, wenn der Benutzer nur 0 oder 0,0 mit einem regulären Ausdruck in Angular eingibt?

Der Winkelvalidierungsstatus eines verschachtelten ControlValueAccessor wird in Eltern nicht korrekt weitergegeben. Wie kann diese Validierung implementiert werden?

Wie kann der Wert eines neu erstellten benutzerdefinierten Modellfelds in Django angezeigt werden?

TOP Liste

  1. 1

    Modbus Python Schneider PM5300

  2. 2

    Glassfish v3.0.1 im Vergleich zu Oracle GlassFish Server 3.0.1 - Gibt es einen technischen Grund, die kommerzielle Version zu verwenden?

  3. 3

    Wie schließe ich mehrere Ordner mit der Variablen EXTRA_ARGS aus?

  4. 4

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

  5. 5

    Wie kann man eine Multi-Container-Anwendung in Steuerkarten erstellen?

  6. 6

    ElasticSearch - Knotensperren konnten nicht abgerufen werden

  7. 7

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  8. 8

    Elasticsearch startet nicht nach dem Laden in viele Daten

  9. 9

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  10. 10

    Wie Verwenden von Httpclient mit jedem SSL-Zertifikat, egal wie „schlecht“ es ist

  11. 11

    Wie vergleicht man scala.xml-Knoten richtig?

  12. 12

    ElasticSeach Auto Complete mit dem Vervollständigungsvorschlag, um das vollständige Dokument zurückzugeben

  13. 13

    Wie füge ich eine Spalte in einer Zeile in der Ansible Jinja2-Vorlage mit der for-Schleife hinzu?

  14. 14

    HTTPS-Verbindung mit Moneris-Servern in Curl

  15. 15

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  16. 16

    Bester Crawler, um festzustellen, ob er mit Technologien gebaut wurde?

  17. 17

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  18. 18

    Wie kann ich den Kaskadenmodus global einstellen?

  19. 19

    Eclipse Oxygen - Projekte verschwinden

  20. 20

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  21. 21

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

heißlabel

Archiv