Direi che nessuna delle tue idee iniziali cattura l'intero quadro. Idea 1 è solo una richiamata. Se si desidera utilizzare un callback: useCallback
. Idea 2 funzionerà ed è preferibile se non è necessario utilizzare redux. A volte stai meglio usando redux. Forse stai impostando la validità del modulo controllando che nessuno dei campi di input contenga errori o qualcosa di simile. Dato che siamo in tema di redux, supponiamo che sia così.
Di solito, l'approccio migliore alla gestione degli errori con Redux consiste nell'avere un campo di errore nello stato che viene quindi passato a un componente di errore.
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
Il componente errore non deve solo visualizzare un errore, ma potrebbe anche causare effetti collaterali useEffect
.
La modalità di impostazione / disinserimento dell'errore dipende dall'applicazione. Usiamo l'esempio del tuo numero di telefono.
1. Se il controllo di validità è una funzione pura, può essere eseguito nel riduttore.
Quindi impostare o annullare l'impostazione del campo di errore in risposta alle azioni di modifica del numero di telefono. In un riduttore costruito con un'istruzione switch potrebbe apparire così.
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2. Se il back-end segnala errori, inviare le azioni di errore.
Supponiamo che tu stia inviando il numero di telefono a un back-end che esegue la convalida prima di fare qualcosa con il numero. Non puoi sapere se i dati sono validi sul lato client. Devi solo prendere la parola del server per questo.
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],
);
Il riduttore dovrebbe quindi presentare un messaggio appropriato per l'errore e impostarlo.
Non dimenticare di annullare l'errore. È possibile annullare l'errore su un'azione di modifica o quando si effettua un'altra richiesta a seconda dell'applicazione.
I due approcci che ho delineato non si escludono a vicenda. È possibile utilizzare il primo per visualizzare errori rilevabili localmente e anche il secondo per visualizzare errori lato server o di rete.