İlk fikirlerinizin hiçbirinin tüm resmi yakalamadığını söyleyebilirim. Fikir 1 sadece bir geri aramadır. Bir geri arama kullanmak istiyorsanız: useCallback
. Idea 2 çalışır ve redux kullanmanız gerekmiyorsa tercih edilir. Bazen redux kullanmak daha iyi olur. Belki de giriş alanlarının hiçbirinde hata veya benzeri bir şey olmadığını kontrol ederek form geçerliliğini ayarlıyorsunuzdur. Redux konusunda olduğumuz için, durumun böyle olduğunu varsayalım.
Genellikle redux ile hata işlemeye en iyi yaklaşım, bir hata bileşenine iletilen bir hata alanına sahip olmaktır.
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
Hata bileşeni sadece bir hata göstermek zorunda değildir, aynı zamanda yan etkiler de yapabilir useEffect
.
Hatanın nasıl ayarlandığı / ayarlanmadığı uygulamanıza bağlıdır. Telefon numarası örneğinizi kullanalım.
1. Geçerlilik kontrolü saf bir işlevse, redüktörde yapılabilir.
Daha sonra telefon numarası değiştirme eylemlerine yanıt olarak hata alanını ayarlayabilir veya ayarını kaldırabilirsiniz. Bir switch ifadesi ile inşa edilmiş bir redüktörde bu gibi görünebilir.
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2. Hatalar arka uç tarafından bildirilirse, hata eylemlerini gönderin.
Telefon numarasını, numarayla ilgili bir şey yapmadan önce doğrulama yapan bir arka uca gönderdiğinizi varsayalım. Verilerin istemci tarafında geçerli olup olmadığını bilemezsiniz. Bunun için sunucunun sözünü tutmanız yeterlidir.
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],
);
Redüktör daha sonra hata için uygun bir mesaj bulmalı ve ayarlamalıdır.
Hatayı düzeltmeyi unutmayın. Bir değişiklik eyleminde veya uygulamaya bağlı olarak başka bir istekte bulunurken hatayı kaldırabilirsiniz.
Belirttiğim iki yaklaşım birbirini dışlamıyor. İlki yerel olarak algılanabilir hataları görüntülemek için, ikincisini sunucu tarafı veya ağ hatalarını görüntülemek için kullanabilirsiniz.