+ {this.props.children}
+
+
+ {
+ this.setState({value: e.target.value});
+ }}
+ />
+
+
+
+ );
+ }
+}
+
+export default NumberInputDecimal;
diff --git a/src/renderers/dom/client/wrappers/ReactDOMInput.js b/src/renderers/dom/client/wrappers/ReactDOMInput.js
index 0eb9509a7337f..73ae197dc2c21 100644
--- a/src/renderers/dom/client/wrappers/ReactDOMInput.js
+++ b/src/renderers/dom/client/wrappers/ReactDOMInput.js
@@ -220,8 +220,12 @@ var ReactDOMInput = {
// Simulate `input.valueAsNumber`. IE9 does not support it
var valueAsNumber = parseFloat(node.value, 10) || 0;
- // eslint-disable-next-line
- if (value != valueAsNumber) {
+ if (
+ // eslint-disable-next-line
+ value != valueAsNumber ||
+ // eslint-disable-next-line
+ (value == valueAsNumber && node.value != value)
+ ) {
// Cast `value` to a string to ensure the value is set correctly. While
// browsers typically do this as necessary, jsdom doesn't.
node.value = '' + value;
diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
index ababb9120c202..4c099ee9dfcfe 100644
--- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
+++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
@@ -86,6 +86,23 @@ describe('ReactDOMInput', () => {
});
});
+ it('does change the string ".98" to "0.98" with no change handler', () => {
+ class Stub extends React.Component {
+ state = {
+ value: '.98',
+ };
+ render() {
+ return