1. 問題はこれです。入力ボックスがあります。onBlur の時点で値がデータベースにすでに存在するかどうかを確認したいのです。通常メールを登録するときと同じように、リアルタイムでプロンプトが表示されます。メール名が使用されています。以前、jquery の時代には、ajax リクエストは同期と呼ばれることがありました。ただし、antd dva フレームワークでは、リクエストはディスパッチによって開始されます。この場合、これをどのように実装すればよいでしょうか?
Redux に関連するいくつかの概念を完全に理解していない可能性があります。
ディスパッチが開始するのはリクエストではなく、グローバル状態を変更するアクションです。ただし、データ ステータス アクションを変更する最も一般的なシナリオは [非同期ネットワーク リクエストの送信] です。これは、リクエストをディスパッチする必要があるという意味ではなく、非同期シナリオでディスパッチを使用する必要があるという意味でもありません。
あなたの質問に特有ですが、入力ボックスの状態は明らかに非常にローカルであり、明らかに[通常の状況では]ページの他の部分の状態と連動していません。したがって、現時点では、Dva によってカプセル化された Redux パッケージを完全に放棄し、代わりに fetch / axios / $.ajax に基づいてモジュールをカプセル化し、この入力ボックス コンポーネントを提供できます。
最後に、同期 Ajax は悪い習慣です。非同期リクエストを Promise としてカプセル化することをお勧めします。
@ewind さんの正しい返信 実際、私がこれまでずっと混乱していた理由は、antd フレームワークのフォーム コンポーネントの validateFields メソッドが非同期操作を自動的にブロックすることを知らなかったためです。私は常に非同期検証だと思っていました。以前に提出したフォームを返却しませんでした。
Redux に関連するいくつかの概念を完全に理解していない可能性があります。
ディスパッチが開始するのはリクエストではなく、グローバル状態を変更するアクションです。ただし、データ ステータス アクションを変更する最も一般的なシナリオは [非同期ネットワーク リクエストの送信] です。これは、リクエストをディスパッチする必要があるという意味ではなく、非同期シナリオでディスパッチを使用する必要があるという意味でもありません。
あなたの質問に特有ですが、入力ボックスの状態は明らかに非常にローカルであり、明らかに[通常の状況では]ページの他の部分の状態と連動していません。したがって、現時点では、Dva によってカプセル化された Redux パッケージを完全に放棄し、代わりに fetch / axios / $.ajax に基づいてモジュールをカプセル化し、この入力ボックス コンポーネントを提供できます。
最後に、同期 Ajax は悪い習慣です。非同期リクエストを Promise としてカプセル化することをお勧めします。
@ewind さんの正しい返信
実際、私がこれまでずっと混乱していた理由は、antd フレームワークのフォーム コンポーネントの validateFields メソッドが非同期操作を自動的にブロックすることを知らなかったためです。私は常に非同期検証だと思っていました。以前に提出したフォームを返却しませんでした。