@@ -76,6 +76,7 @@ function updateOptions(
7676 node : HTMLSelectElement ,
7777 multiple : boolean ,
7878 propValue : any ,
79+ setDefaultSelected : boolean ,
7980) {
8081 type IndexableHTMLOptionsCollection = HTMLOptionsCollection & {
8182 [ key : number ] : HTMLOptionElement ,
@@ -94,6 +95,9 @@ function updateOptions(
9495 if ( options [ i ] . selected !== selected ) {
9596 options [ i ] . selected = selected ;
9697 }
98+ if ( selected && setDefaultSelected ) {
99+ options [ i ] . defaultSelected = true ;
100+ }
97101 }
98102 } else {
99103 // Do not set `select.value` as exact behavior isn't consistent across all
@@ -103,6 +107,9 @@ function updateOptions(
103107 for ( let i = 0 ; i < options . length ; i ++ ) {
104108 if ( options [ i ] . value === selectedValue ) {
105109 options [ i ] . selected = true ;
110+ if ( setDefaultSelected ) {
111+ options [ i ] . defaultSelected = true ;
112+ }
106113 return ;
107114 }
108115 if ( defaultSelected === null && ! options [ i ] . disabled ) {
@@ -175,7 +182,7 @@ var ReactDOMSelect = {
175182 if ( value != null ) {
176183 updateOptions ( node , ! ! props . multiple , value ) ;
177184 } else if ( props . defaultValue != null ) {
178- updateOptions ( node , ! ! props . multiple , props . defaultValue ) ;
185+ updateOptions ( node , ! ! props . multiple , props . defaultValue , true ) ;
179186 }
180187 } ,
181188
@@ -194,7 +201,7 @@ var ReactDOMSelect = {
194201 } else if ( wasMultiple !== ! ! props . multiple ) {
195202 // For simplicity, reapply `defaultValue` if `multiple` is toggled.
196203 if ( props . defaultValue != null ) {
197- updateOptions ( node , ! ! props . multiple , props . defaultValue ) ;
204+ updateOptions ( node , ! ! props . multiple , props . defaultValue , true ) ;
198205 } else {
199206 // Revert the select back to its default unselected state.
200207 updateOptions ( node , ! ! props . multiple , props . multiple ? [ ] : '' ) ;
0 commit comments