Tôi muốn nói rằng cả hai ý tưởng ban đầu của bạn đều không chụp được toàn bộ bức tranh. Ý tưởng 1 chỉ là một cuộc gọi lại. Nếu bạn muốn sử dụng một cuộc gọi lại : useCallback
. Ý tưởng 2 sẽ hoạt động và tốt hơn nếu bạn không cần sử dụng redux. Đôi khi, bạn nên sử dụng redux. Có thể bạn đang thiết lập tính hợp lệ của biểu mẫu bằng cách kiểm tra không có trường đầu vào nào có lỗi hoặc tương tự. Vì chúng ta đang ở chủ đề redux, chúng ta hãy giả sử như vậy.
Thông thường cách tiếp cận tốt nhất để xử lý lỗi với redux là có một trường lỗi ở trạng thái sau đó được chuyển đến một thành phần lỗi.
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
Thành phần lỗi không phải chỉ hiển thị một lỗi, nó cũng có thể gây ra tác dụng phụ useEffect
.
Làm thế nào lỗi được đặt / hủy đặt tùy thuộc vào ứng dụng của bạn. Hãy sử dụng ví dụ số điện thoại của bạn.
1. Nếu kiểm tra tính hợp lệ là một hàm thuần túy, nó có thể được thực hiện trong bộ giảm tốc.
Sau đó, bạn sẽ đặt hoặc hủy đặt trường lỗi để phản hồi các hành động thay đổi số điện thoại. Trong một bộ giảm tốc được xây dựng với một câu lệnh chuyển đổi, nó có thể trông như thế này.
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2. Nếu lỗi được báo cáo bởi phụ trợ, hãy gửi các hành động lỗi.
Giả sử bạn đang gửi số điện thoại đến một phụ trợ xác thực trước khi nó thực hiện điều gì đó với số đó. Bạn không thể biết liệu dữ liệu có hợp lệ ở phía máy khách không. Bạn sẽ phải lấy từ của máy chủ cho nó.
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],
);
Bộ giảm tốc sau đó sẽ đưa ra một thông báo thích hợp cho lỗi và đặt nó.
Đừng quên bỏ đặt lỗi. Bạn có thể bỏ đặt lỗi trên một hành động thay đổi hoặc khi thực hiện một yêu cầu khác tùy thuộc vào ứng dụng.
Hai cách tiếp cận tôi vạch ra không loại trừ lẫn nhau. Bạn có thể sử dụng cái đầu tiên để hiển thị các lỗi có thể phát hiện cục bộ và cũng có thể sử dụng lỗi thứ hai để hiển thị phía máy chủ hoặc lỗi mạng.