diff --git a/packages/react-dom/src/__tests__/ReactDOMInput-test.js b/packages/react-dom/src/__tests__/ReactDOMInput-test.js index 282207f78dd78..469fac4724f3a 100644 --- a/packages/react-dom/src/__tests__/ReactDOMInput-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMInput-test.js @@ -271,7 +271,7 @@ describe('ReactDOMInput', () => { dispatchEventOnNode(node, 'input'); - expect(node.getAttribute('value')).toBe('2.0'); + expect(node.getAttribute('value')).toBe('2'); expect(node.value).toBe('2.0'); }); }); @@ -667,7 +667,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe('0'); - expect(node.defaultValue).toBe('0'); + expect(node.defaultValue).toBe(''); }); it('should properly transition from 0 to an empty value', function() { @@ -683,7 +683,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe(''); - expect(node.defaultValue).toBe(''); + expect(node.defaultValue).toBe('0'); }); it('should properly transition a text input from 0 to an empty 0.0', function() { @@ -699,7 +699,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe('0.0'); - expect(node.defaultValue).toBe('0.0'); + expect(node.defaultValue).toBe('0'); }); it('should properly transition a number input from "" to 0', function() { @@ -715,7 +715,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe('0'); - expect(node.defaultValue).toBe('0'); + expect(node.defaultValue).toBe(''); }); it('should properly transition a number input from "" to "0"', function() { @@ -731,7 +731,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe('0'); - expect(node.defaultValue).toBe('0'); + expect(node.defaultValue).toBe(''); }); it('should have the correct target value', () => { @@ -1605,7 +1605,7 @@ describe('ReactDOMInput', () => { }; } - it('always sets the attribute when values change on text inputs', function() { + it('retains the initial value attribute when values change on text inputs', function() { const Input = getTestInput(); const stub = ReactDOM.render(, container); const node = ReactDOM.findDOMNode(stub); @@ -1613,7 +1613,7 @@ describe('ReactDOMInput', () => { setUntrackedValue.call(node, '2'); dispatchEventOnNode(node, 'input'); - expect(node.getAttribute('value')).toBe('2'); + expect(node.getAttribute('value')).toBe(''); }); it('does not set the value attribute on number inputs if focused', () => { @@ -1632,21 +1632,6 @@ describe('ReactDOMInput', () => { expect(node.getAttribute('value')).toBe('1'); }); - it('sets the value attribute on number inputs on blur', () => { - const Input = getTestInput(); - const stub = ReactDOM.render( - , - container, - ); - const node = ReactDOM.findDOMNode(stub); - - setUntrackedValue.call(node, '2'); - dispatchEventOnNode(node, 'input'); - dispatchEventOnNode(node, 'blur'); - - expect(node.getAttribute('value')).toBe('2'); - }); - it('an uncontrolled number input will not update the value attribute on blur', () => { const node = ReactDOM.render( , @@ -1784,7 +1769,7 @@ describe('ReactDOMInput', () => { expect(node.getAttribute('value')).toBe(''); }); - it('treats updated Symbol value as an empty string', function() { + it('treats updated Symbol value as initial value', function() { ReactDOM.render( {}} />, container); expect(() => ReactDOM.render( @@ -1795,7 +1780,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe(''); - expect(node.getAttribute('value')).toBe(''); + expect(node.getAttribute('value')).toBe('foo'); }); it('treats initial Symbol defaultValue as an empty string', function() { @@ -1832,7 +1817,7 @@ describe('ReactDOMInput', () => { expect(node.getAttribute('value')).toBe(''); }); - it('treats updated function value as an empty string', function() { + it('treats updated function value as initial value', function() { ReactDOM.render( {}} />, container); expect(() => ReactDOM.render( @@ -1843,7 +1828,7 @@ describe('ReactDOMInput', () => { const node = container.firstChild; expect(node.value).toBe(''); - expect(node.getAttribute('value')).toBe(''); + expect(node.getAttribute('value')).toBe('foo'); }); it('treats initial function defaultValue as an empty string', function() { diff --git a/packages/react-dom/src/client/ReactDOMFiberInput.js b/packages/react-dom/src/client/ReactDOMFiberInput.js index 3d03444c77507..1bd0e8a82f63b 100644 --- a/packages/react-dom/src/client/ReactDOMFiberInput.js +++ b/packages/react-dom/src/client/ReactDOMFiberInput.js @@ -194,9 +194,7 @@ export function updateWrapper(element: Element, props: Object) { return; } - if (props.hasOwnProperty('value')) { - setDefaultValue(node, props.type, value); - } else if (props.hasOwnProperty('defaultValue')) { + if (props.hasOwnProperty('defaultValue')) { setDefaultValue(node, props.type, getToStringValue(props.defaultValue)); } @@ -321,7 +319,7 @@ function updateNamedCousins(rootNode, props) { // when the user is inputting text // // https://github.com/facebook/react/issues/7253 -export function setDefaultValue( +function setDefaultValue( node: InputWithWrapperState, type: ?string, value: *, diff --git a/packages/react-dom/src/events/ChangeEventPlugin.js b/packages/react-dom/src/events/ChangeEventPlugin.js index e5f65ceff282f..bd3127999b9f0 100644 --- a/packages/react-dom/src/events/ChangeEventPlugin.js +++ b/packages/react-dom/src/events/ChangeEventPlugin.js @@ -27,7 +27,6 @@ import getEventTarget from './getEventTarget'; import isEventSupported from './isEventSupported'; import {getNodeFromInstance} from '../client/ReactDOMComponentTree'; import * as inputValueTracking from '../client/inputValueTracking'; -import {setDefaultValue} from '../client/ReactDOMFiberInput'; const eventTypes = { change: { @@ -237,9 +236,6 @@ function handleControlledInputBlur(node) { if (!state || !state.controlled || node.type !== 'number') { return; } - - // If controlled, assign the value attribute to the current value on blur - setDefaultValue(node, 'number', node.value); } /**