React: 制御入力の場合、nullまたは ""で初期化しない限り、ステップは期待どおりに機能しません。

作成日 2018年03月06日  ·  6コメント  ·  ソース: facebook/react

バグ

現在の動作は何ですか?
input type = "number"の場合、初期値が設定されていると、ステップが期待どおりに機能しません。 ステップは、初期値が「」またはnullの場合にのみ尊重されるようです。

例:
https://codepen.io/anon/pen/MQMBmX

この例では、制御された入力バインディング値とステップを使用しています。 ステップは値の1/10です。 テキストボックスの値を50000に編集し、ステッパーを使用してインクリメントすると、50100にインクリメントされます(つまり、現在のステップではなく初期値によって)。

初期値が「」またはnullになるようにコードを編集します。 テキストボックスを50000に編集し、ステップアップします-値は期待どおり55000になります。

期待される動作は何ですか?
最初に入力コンポーネント値をnullまたは ""に初期化することなく、ステップを尊重する数値入力をレンダリングできるはずです。

初期値が提供されると、DOMに値属性が書き込まれるようです(例:value = "100")。 初期値が ""またはnullの場合、value属性のみが割り当てなしでDOMに書き込まれます。 例(値)。

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

16.3.0-alpha.1(まだ問題があるかどうかを確認するためにこのバージョンに移植されています)
0.14.7(元々このバージョンで見つかりました)

Chromeにのみ影響するようです(確認済みのWindowsとMac、バージョン59と64)。 バグはSafariには表示されません(少なくともMacでは)。

DOM Bug

最も参考になるコメント

はい。 実は、これについてタイムラインをまとめるべきかと思います。

全てのコメント6件

Windows10のChrome64とDebianのFirefox52の両方で、このフィドルで非常に特殊な動作が見られます。 入力に50000と入力し、すぐに上矢印をクリックすると、50100になります。入力に50000と入力し、ドキュメント内の他の場所をクリックしてから、上矢印をクリックすると、55000になります。

値を変更する必要はありません。上矢印を複数回クリックすると、意味のない数値に変更され始めます。

@andyboyneのレポートをありがとう。 この問題は、フィールドがぼやけるまで数値入力のvalue属性を更新しないという事実に起因します。 これは、ブラウザーの検証に関連する多数の不要な動作を回避するために行います。 cc @ nhunzaker。

これは、制御された入力https://github.com/facebook/react/issues/11896value属性の同期を最終的に停止したら解決する必要があります。

はい。 実は、これについてタイムラインをまとめるべきかと思います。

よく言われるように、これは同期の問題であり、フィールドがぼやけているとフィールドは同期します。
そこで、console.logを追加したところ、フィールドがぼやけていない間はe.target.valueとe.target.getAttribute( "value")が同期されていないことがわかりました。
したがって、回避策はe.target.setAttribute( "value"、e.target.value);を追加することです。 この値を強制的に更新すると、期待どおりに機能します。

       onChange={e => {
        console.log("target" , e.target.value);
        console.log("getAttribute value",  e.target.getAttribute("value"));
        e.target.setAttribute("value",e.target.value); 
        this.setState({value: e.target.value, step: e.target.value / 10});
      }}

いいえ、これはまだ問題です、それは私を夢中にさせます、私たちはまだv16によって制御された入力を単純化していません!

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