diff --git a/fixtures/dom/src/components/fixtures/selects/index.js b/fixtures/dom/src/components/fixtures/selects/index.js index 9356a3770ac98..012a3eea959da 100644 --- a/fixtures/dom/src/components/fixtures/selects/index.js +++ b/fixtures/dom/src/components/fixtures/selects/index.js @@ -3,6 +3,28 @@ import TestCase from '../../TestCase'; const React = window.React; const ReactDOM = window.ReactDOM; +const ReactDOMClient = window.ReactDOMClient; + +class ControlledSelect extends React.Component { + constructor(props) { + super(props); + this.state = {value: 'bar'}; + } + + handleChange = event => { + this.setState({value: event.target.value}); + }; + + render() { + return ( + + ); + } +} class SelectFixture extends React.Component { state = {value: ''}; @@ -33,15 +55,24 @@ class SelectFixture extends React.Component { } _renderNestedSelect() { - ReactDOM.render( + const element = ( , - this._nestedDOMNode + ); + const container = this._nestedDOMNode; + if (ReactDOMClient === undefined) { + ReactDOM.render(element, container); + } else { + const root = ReactDOMClient.createRoot(container); + // eslint-disable-next-line no-undef -- queueMicrotask is supported in modern browsers + queueMicrotask( + ReactDOM.flushSync.bind(null, root.render.bind(root, element)) + ); + } } render() { @@ -230,6 +261,32 @@ class SelectFixture extends React.Component { select attribute assignment.

+ + + + No options should be selected. + + +
+
+ + + +
+ +

+ Notes: form.reset() resets each associated form + element to its default value. For HTMLInputElement that's the value + attribute. For HTMLSELECTElement it's option with defaultSelected + set to true. +

+

+ Bug became more pressing when React introduced automatic form reset. +

+
); } diff --git a/packages/react-dom-bindings/src/client/ReactDOMOption.js b/packages/react-dom-bindings/src/client/ReactDOMOption.js index ae7a7ba999c06..bf224bde06dd2 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMOption.js +++ b/packages/react-dom-bindings/src/client/ReactDOMOption.js @@ -56,7 +56,7 @@ export function validateOptionProps(element: Element, props: Object) { if (props.selected != null && !didWarnSelectedSetOnOption) { console.error( 'Use the `defaultValue` or `value` props on instead of ' + - 'setting `selected` on