機能をリクエストしバグを報告しますか?
バグを報告。 https://github.com/mozilla-services/react-jsonschema-form/issues/1153で最初に報告されました
現在の動作は何ですか?
フィールドがReactの制御されたコンポーネントである場合、オートフィルはフィールドの既存の値を上書きします。
https://jsfiddle.net/epicfaace/9p17e2qx/21/を参照して
期待される動作は何ですか?
自動入力は既存のフィールドを上書きしません。 期待される動作で動作するプレーンなHTMLフォームでJSFiddleを作成しました。
https://jsfiddle.net/epicfaace/1my3f9n4/6/を参照して
この問題の影響を受けるReactのバージョンとブラウザ/ OSはどれですか?
React 15.3.2
Chrome 71.0.3578.98
「バリュー」プロップの場合に発生するようです(例: どの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アプローチを比較する要点を作成しました。
value属性がvalueプロパティと同じである場合、Chromeは入力が「変更されていない」と見なし、自動入力アクション中にvalueプロパティを置き換えます。
これは、#13525(「値属性への入力値の反映を停止する」)によって少なくとも部分的に解決される可能性があります。
最も参考になるコメント
「バリュー」プロップの場合に発生するようです(例: どのchromeがフィールドのデフォルト値/プレースホルダーと見なされるか)は、フィールドの挿入された値と同じです。 したがって、reactが状態変更時に値propを更新すると、入力内容に一致するようにデフォルト値/プレースホルダーが技術的に変更されます。したがって、chromeはこれを変更されていないフィールドと見なし、自動入力時に上書きします。
例えば。 名フィールドに文字列を入力します... reactは、入力したものに値propを更新します。 メールの自動入力を試してみると、名のフィールドが上書きされます。
ただし、名フィールドに文字列を入力してから、要素を調べて、入力した文字列以外の文字列に名の値のプロパティを編集し、電子メールの自動入力を再試行してください...今回は上書きされません。 。値が「デフォルト」値と同じではないため。
それを回避する別の方法はonChangeで、autocomplete = this.state.valueを更新します。 また、chromeは、何らかの理由でこのフィールドをオートコンプリートしないことを認識します。 (autocomplete = offは機能しません...ランダムな文字列である必要があります)空でthis.state.valueが空の場合でも、オートフィルは期待どおりにフィールドで機能します。