私は ajax リクエストを行うフォームを持っています。問題は、フォームをクリックするたびに、そのリクエストの回数が倍増することです。
サブミット・インターセプトを設定した方法が原因だと確信していますが、それを単一のコンポーネントとしてカプセル化しながら、それを行う方法が他にわかりません。
ビュー レイヤーとして反応を使用しており、リクエストをインターセプトするコードを含む関数をアタッチしました。この関数は、afterMount
コールバックとafter_update
コールバックの両方で呼び出されます。これを行わないと、フォームの送信が傍受されないか、一度だけ傍受されてから通常の送信が行われます。
これらのイベントが発生し、追加の送信ハンドラーが追加されるため、明らかに増加しています。
私は opal と react.rb を使用しているため、コードが少し奇妙に見えるかもしれません。
フォームの送信アクションをインターセプトする関数は次のとおりです
def set_up_login_form
puts 'setting up form'
login_form = Element["#login_form"]
login_form.on :submit do |event|
unless login_state == :processing
event.prevent_default
username = login_form.find('#username').value
password = login_form.find('#password').value
login!
self.username = username
self.handle_login_submit({username: username , password: password})
end
end
end
ここに私のコールバックがあります:
after_mount do
fix_button #untill materialize.js gets fixed
set_up_login_form
end
after_update do
set_up_login_form
end
コンポーネントの状態がすでにリクエストの途中であるかどうかを確認することで、リクエストの量を減らすことができましたが、追加される送信ハンドラーの量は減りませんが、かなりの量の処理が停止しますが、追加されるハンドラーの実際の乗算を停止しません。