Ich würde sagen, dass keine Ihrer ersten Ideen das ganze Bild erfasst. Idee 1 ist nur ein Rückruf. Wenn Sie einen Rückruf verwenden möchten : useCallback
. Idee 2 funktioniert und ist vorzuziehen, wenn Sie keinen Redux verwenden müssen. Manchmal ist es besser, Redux zu verwenden. Möglicherweise legen Sie die Gültigkeit des Formulars fest, indem Sie überprüfen, ob keines der Eingabefelder Fehler oder ähnliches aufweist. Da wir uns mit Redux befassen, nehmen wir an, dass dies der Fall ist.
Normalerweise besteht der beste Ansatz zur Fehlerbehandlung mit Redux darin, ein Fehlerfeld im Status zu haben, das dann an eine Fehlerkomponente übergeben wird.
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
Die Fehlerkomponente muss nicht nur einen Fehler anzeigen, sondern kann auch Nebenwirkungen verursachen useEffect
.
Wie der Fehler gesetzt / deaktiviert wird, hängt von Ihrer Anwendung ab. Verwenden wir ein Beispiel für Ihre Telefonnummer.
1. Wenn die Gültigkeitsprüfung eine reine Funktion ist, kann sie im Reduzierer durchgeführt werden.
Sie würden dann das Fehlerfeld als Reaktion auf Aktionen zum Ändern der Telefonnummer setzen oder deaktivieren. In einem Reduzierer, der mit einer switch-Anweisung erstellt wurde, könnte dies so aussehen.
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2. Wenn das Backend Fehler meldet, lösen Sie Fehleraktionen aus.
Angenommen, Sie senden die Telefonnummer an ein Backend, das die Validierung durchführt, bevor es etwas mit der Nummer macht. Sie können nicht wissen, ob die Daten auf der Clientseite gültig sind. Sie müssen nur das Wort des Servers dafür nehmen.
const handleSubmit = useCallback(
() => sendPhoneNumber(phoneNumber)
.then(response => dispatch({
type: 'PHONE_NUMBER_SUBMISSION_SUCCESS',
response,
}))
.catch(error => dispatch({
type: 'PHONE_NUMBER_SUBMISSION_FAILURE',
error,
})),
[dispatch, phoneNumber],
);
Der Reduzierer sollte dann eine entsprechende Meldung für den Fehler erstellen und einstellen.
Vergessen Sie nicht, den Fehler zu deaktivieren. Sie können den Fehler je nach Anwendung bei einer Änderungsaktion oder bei einer anderen Anforderung deaktivieren.
Die beiden von mir skizzierten Ansätze schließen sich nicht gegenseitig aus. Sie können die erste verwenden, um lokal erkennbare Fehler anzuzeigen, und die zweite verwenden, um serverseitige oder Netzwerkfehler anzuzeigen.