Saya akan mengatakan bahwa tidak satu pun dari ide awal Anda menangkap seluruh gambaran. Ide 1 hanyalah sebuah panggilan balik. Jika Anda ingin menggunakan callback: useCallback
. Ide 2 akan berfungsi dan lebih disukai jika Anda tidak perlu menggunakan redux. Terkadang Anda lebih baik menggunakan redux. Mungkin Anda menetapkan validitas formulir dengan memeriksa tidak ada bidang input yang memiliki kesalahan atau yang serupa. Karena kita berada di topik redux, mari kita asumsikan itu masalahnya.
Biasanya pendekatan terbaik untuk penanganan kesalahan dengan redux adalah memiliki bidang kesalahan dalam keadaan yang kemudian diteruskan ke komponen kesalahan.
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
Komponen kesalahan tidak harus hanya menampilkan kesalahan, itu juga bisa melakukan efek samping useEffect
.
Bagaimana kesalahan diatur / tidak disetel tergantung pada aplikasi Anda. Mari kita gunakan contoh nomor telepon Anda.
1. Jika pemeriksaan validitas adalah fungsi murni, itu dapat dilakukan di peredam.
Anda kemudian akan mengatur atau menghapus bidang kesalahan dalam menanggapi tindakan perubahan nomor telepon. Dalam peredam yang dibangun dengan pernyataan switch itu bisa terlihat seperti ini.
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2. Jika kesalahan dilaporkan oleh backend, kirim tindakan kesalahan.
Katakanlah Anda mengirim nomor telepon ke backend yang melakukan validasi sebelum melakukan sesuatu dengan nomor tersebut. Anda tidak dapat mengetahui apakah data tersebut valid di sisi klien. Anda hanya perlu mengambil kata server untuk itu.
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],
);
Peredam kemudian harus datang dengan pesan yang sesuai untuk kesalahan dan mengaturnya.
Jangan lupa untuk menghapus kesalahan. Anda dapat menghapus kesalahan pada tindakan perubahan atau saat membuat permintaan lain tergantung pada aplikasi.
Dua pendekatan yang saya uraikan tidak saling eksklusif. Anda dapat menggunakan yang pertama untuk menampilkan kesalahan yang terdeteksi secara lokal dan juga menggunakan yang kedua untuk menampilkan sisi server atau kesalahan jaringan.