React: Chromeオートフィルは、制御されたコンポーネントの値を上書きします

作成日 2019年01月24日  ·  4コメント  ·  ソース: facebook/react

機能をリクエストしバグを報告しますか?
バグを報告。 https://github.com/mozilla-services/react-jsonschema-form/issues/1153で最初に報告されました

現在の動作は何ですか?
フィールドがReactの制御されたコンポーネントである場合、オートフィルはフィールドの既存の値を上書きします。

https://jsfiddle.net/epicfaace/9p17e2qx/21/を参照して

2019-01-24 10 37 23

期待される動作は何ですか?
自動入力は既存のフィールドを上書きしません。 期待される動作で動作するプレーンなHTMLフォームでJSFiddleを作成しました。

https://jsfiddle.net/epicfaace/1my3f9n4/6/を参照して

2019-01-24 10 37 02

この問題の影響を受けるReactのバージョンとブラウザ/ OSはどれですか?
React 15.3.2
Chrome 71.0.3578.98

DOM Breaking Change Bug

最も参考になるコメント

「バリュー」プロップの場合に発生するようです(例: どのchromeがフィールドのデフォルト値/プレースホルダーと見なされるか)は、フィールドの挿入された値と同じです。 したがって、reactが状態変更時に値propを更新すると、入力内容に一致するようにデフォルト値/プレースホルダーが技術的に変更されます。したがって、chromeはこれを変更されていないフィールドと見なし、自動入力時に上書きします。

例えば。 名フィールドに文字列を入力します... reactは、入力したものに値propを更新します。 メールの自動入力を試してみると、名のフィールドが上書きされます。

ただし、名フィールドに文字列を入力してから、要素を調べて、入力した文字列以外の文字列に名の値のプロパティを編集し、電子メールの自動入力を再試行してください...今回は上書きされません。 。値が「デフォルト」値と同じではないため。

それを回避する別の方法はonChangeで、autocomplete = this.state.valueを更新します。 また、chromeは、何らかの理由でこのフィールドをオートコンプリートしないことを認識します。 (autocomplete = offは機能しません...ランダムな文字列である必要があります)空でthis.state.valueが空の場合でも、オートフィルは期待どおりにフィールドで機能します。

全てのコメント4件

「バリュー」プロップの場合に発生するようです(例: どのchromeがフィールドのデフォルト値/プレースホルダーと見なされるか)は、フィールドの挿入された値と同じです。 したがって、reactが状態変更時に値propを更新すると、入力内容に一致するようにデフォルト値/プレースホルダーが技術的に変更されます。したがって、chromeはこれを変更されていないフィールドと見なし、自動入力時に上書きします。

例えば。 名フィールドに文字列を入力します... reactは、入力したものに値propを更新します。 メールの自動入力を試してみると、名のフィールドが上書きされます。

ただし、名フィールドに文字列を入力してから、要素を調べて、入力した文字列以外の文字列に名の値のプロパティを編集し、電子メールの自動入力を再試行してください...今回は上書きされません。 。値が「デフォルト」値と同じではないため。

それを回避する別の方法はonChangeで、autocomplete = this.state.valueを更新します。 また、chromeは、何らかの理由でこのフィールドをオートコンプリートしないことを認識します。 (autocomplete = offは機能しません...ランダムな文字列である必要があります)空でthis.state.valueが空の場合でも、オートフィルは期待どおりにフィールドで機能します。

^^そうです。 onChangeの提案を使用した実際の例を次に示します: https ://jsfiddle.net/epicfaace/9p17e2qx/29/

とても興味深い! これは、以前は気づかなかった入力の値属性/プロパティを同期することの副作用です(ありがとう、@ mabeabe28):

value属性がvalueプロパティと同じである場合、Chromeは入力が「変更されていない」と見なし、自動入力アクション中にvalueプロパティを置き換えます。

これは他のブラウザにも当てはまるのだろうか。

自動入力の問題を追跡するバグが必要なようですが、これを文書化したものがあるかどうかはわかりません。 また、ネイティブアプローチとReactアプローチを比較する要点を作成しました。

https://codesandbox.io/s/01zr8pll00

value属性がvalueプロパティと同じである場合、Chromeは入力が「変更されていない」と見なし、自動入力アクション中にvalueプロパティを置き換えます。

これは、#13525(「値属性への入力値の反映を停止する」)によって少なくとも部分的に解決される可能性があります。

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