React: バグ: タイプが変更された後、入力 minLength が機能しない

作成日 2020年11月05日  ·  3コメント  ·  ソース: facebook/react

minLength 8 のパスワード タイプの入力があり、タイプをテキストに変更するトグルがあります (パスワード トグル)。
長さ < 8 で入力して送信を押すと、送信できません。 ただし、パスワードを切り替えてタイプをテキストに変更してフォームを送信すると、送信できます。 ところで、useRef() を使用して

リアクトのバージョン:
反応: ^17.0.1
反応ドーム: ^17.0.1

再現する手順

  1. タイプ文字 < minLength
  2. フォームを送信
  3. フォームタイプを切り替える
  4. フォームを送信

コード例へのリンク: DEMO

現在の振る舞い

minLength 未満でもフォームが送信される

期待される動作

minLength 未満の場合、フォームが送信されない

Safari DOM Bug

最も参考になるコメント

ありがとう、私はこれを再現できます。

通常、入力が元の状態の場合、検証は無視されます。 何も入力せずにフォームを送信すると、 minLengthは無視されます。

すべての制約を満たさない何かを入力した場合、Safari はフォームを正しく無効としてマークします。 ただし、 typeが変更されると、Safari は入力を元の状態であると見なすようです。 したがって、入力が完了した後にtype変更された場合、無効な値が送信されます。

問題は、React がこの癖を修正できるか、修正すべきか、あるいは Safari がこれを修正すべきかどうかです。

編集:
反応のない最小限の再現: https://codesandbox.io/s/condescending-bhabha-n4374?file=/src/index.js

この動作が必要な場合は、Safari でバグを報告することをお勧めします。

全てのコメント3件

ご報告ありがとうございます。

私は 2 つの問題を特定できます。

  1. デモでは 8 ではなくminLength="3"います。
    2 文字以上入力する限り、8 文字未満の入力でも問題ありません。
  2. minLengthは IE 11 ではサポートされていません: https://caniuse.com/input-minlength
    Chrome 85 でデモをテストしましたが、2 文字未満を入力すると送信できませんでした。
    コードをテストするときに使用していたブラウザは何ですか?

mac os 10.14.6 とブラウザ Safari 13.0.5 (14608.5.12) を使用しています
何か忘れた、切り替えた後は何も入力しないでください

ところで、Chrome 86.0.4240.183 で試してみると、正常に動作します。 サファリでしか起こらないと思う

再現手順 1

  1. タイプ文字 < minLength
  2. フォームを送信
  3. フォームタイプを切り替える
  4. トグルの後に何も入力しないでください
  5. フォームを送信
  6. フォームが送信されます

再現手順 2

  1. タイプ文字 < minLength
  2. フォームを送信
  3. フォームタイプを切り替える
  4. トグル後に何かを入力
  5. フォームを送信
  6. フォームは送信されません

ありがとう、私はこれを再現できます。

通常、入力が元の状態の場合、検証は無視されます。 何も入力せずにフォームを送信すると、 minLengthは無視されます。

すべての制約を満たさない何かを入力した場合、Safari はフォームを正しく無効としてマークします。 ただし、 typeが変更されると、Safari は入力を元の状態であると見なすようです。 したがって、入力が完了した後にtype変更された場合、無効な値が送信されます。

問題は、React がこの癖を修正できるか、修正すべきか、あるいは Safari がこれを修正すべきかどうかです。

編集:
反応のない最小限の再現: https://codesandbox.io/s/condescending-bhabha-n4374?file=/src/index.js

この動作が必要な場合は、Safari でバグを報告することをお勧めします。

このページは役に立ちましたか?
0 / 5 - 0 評価