あなたの最初のアイデアはどちらも全体像を捉えているとは言えません。アイデア1は単なるコールバックです。コールバックを使用する場合:useCallback
。reduxを使用する必要がない場合は、アイデア2が機能し、推奨されます。reduxを使用した方がよい場合もあります。たぶん、入力フィールドにエラーなどがないことを確認することで、フォームの有効性を設定しています。reduxのトピックを扱っているので、そうだとしましょう。
通常、reduxを使用したエラー処理への最良のアプローチは、エラーコンポーネントに渡される状態のエラーフィールドを持つことです。
const ExampleErrorComponent= () => {
const error = useSelector(selectError);
if (!error) return null;
return <div className="error-message">{error}</div>;
}
エラーコンポーネントは、エラーを表示するだけでなく、を使用して副作用を発生させることもできuseEffect
ます。
エラーの設定/設定解除の方法は、アプリケーションによって異なります。電話番号の例を使用してみましょう。
1.妥当性チェックが純粋な関数の場合、レデューサーで実行できます。
次に、電話番号の変更アクションに応じてエラーフィールドを設定または設定解除します。switchステートメントで構築されたレデューサーでは、次のようになります。
case 'PHONE_NUMBER_CHANGE':
return {
...state,
phoneNumber: action.phoneNumber,
error: isValidPhoneNumber(action.phoneNumber) ? undefined : 'Invalid phone number',
};
2.エラーがバックエンドによって報告された場合、エラーアクションをディスパッチします。
電話番号を処理する前に検証を行うバックエンドに電話番号を送信するとします。データがクライアント側で有効かどうかはわかりません。あなたはただそれについてサーバーの言葉を取る必要があるでしょう。
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],
);
次に、レデューサーはエラーに適切なメッセージを表示し、それを設定する必要があります。
エラーを解除することを忘れないでください。アプリケーションに応じて、変更アクション時または別の要求を行うときにエラーの設定を解除できます。
私が概説した2つのアプローチは相互に排他的ではありません。1番目を使用してローカルで検出可能なエラーを表示し、2番目を使用してサーバー側またはネットワークエラーを表示することもできます。