diff --git a/packages/react-dom/src/__tests__/ReactDOMInput-test.js b/packages/react-dom/src/__tests__/ReactDOMInput-test.js index 578e5b100e8a9..feed5963ebeba 100644 --- a/packages/react-dom/src/__tests__/ReactDOMInput-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMInput-test.js @@ -739,9 +739,12 @@ describe('ReactDOMInput', () => { const cNode = stub.refs.c; expect(aNode.checked).toBe(true); + expect(aNode.hasAttribute('checked')).toBe(true); expect(bNode.checked).toBe(false); + expect(bNode.hasAttribute('checked')).toBe(false); // c is in a separate form and shouldn't be affected at all here expect(cNode.checked).toBe(true); + expect(cNode.hasAttribute('checked')).toBe(true); bNode.checked = true; // This next line isn't necessary in a proper browser environment, but @@ -750,6 +753,11 @@ describe('ReactDOMInput', () => { aNode.checked = false; expect(cNode.checked).toBe(true); + // The original 'checked' attribute should be unchanged + expect(aNode.hasAttribute('checked')).toBe(true); + expect(bNode.hasAttribute('checked')).toBe(false); + expect(cNode.hasAttribute('checked')).toBe(true); + // Now let's run the actual ReactDOMInput change event handler ReactTestUtils.Simulate.change(bNode); @@ -1324,7 +1332,6 @@ describe('ReactDOMInput', () => { 'set property value', 'set attribute value', 'set attribute checked', - 'set attribute checked', ]); }); @@ -1389,7 +1396,6 @@ describe('ReactDOMInput', () => { 'node.value = "1980-01-01"', 'node.setAttribute("value", "1980-01-01")', 'node.setAttribute("checked", "")', - 'node.setAttribute("checked", "")', ]); }); diff --git a/packages/react-dom/src/client/ReactDOMFiberInput.js b/packages/react-dom/src/client/ReactDOMFiberInput.js index c164d984199a0..07b4752182219 100644 --- a/packages/react-dom/src/client/ReactDOMFiberInput.js +++ b/packages/react-dom/src/client/ReactDOMFiberInput.js @@ -243,7 +243,7 @@ export function postMountWrapper( node.name = ''; } node.defaultChecked = !node.defaultChecked; - node.defaultChecked = !node.defaultChecked; + node.defaultChecked = !!node._wrapperState.initialChecked; if (name !== '') { node.name = name; }