Skip to content

Commit

Permalink
Match select value against primitives to string but not undefined (#2…
Browse files Browse the repository at this point in the history
  • Loading branch information
sebmarkbage authored Mar 12, 2022
1 parent 832e298 commit 7967240
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -246,4 +246,34 @@ describe('ReactDOMServerIntegrationSelect', () => {
expect(option.selected).toBe(true);
},
);

itRenders(
'a boolean true select value match the string "true"',
async render => {
const e = await render(
<select value={true} readOnly={true}>
<option value="first">First</option>
<option value="true">True</option>
</select>,
1,
);
expect(e.firstChild.selected).toBe(false);
expect(e.lastChild.selected).toBe(true);
},
);

itRenders(
'a missing select value does not match the string "undefined"',
async render => {
const e = await render(
<select readOnly={true}>
<option value="first">First</option>
<option value="undefined">Undefined</option>
</select>,
1,
);
expect(e.firstChild.selected).toBe(true);
expect(e.lastChild.selected).toBe(false);
},
);
});
11 changes: 8 additions & 3 deletions packages/react-dom/src/server/ReactDOMServerFormatConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,7 @@ function pushStartOption(
}
}

if (selectedValue !== null) {
if (selectedValue != null) {
let stringValue;
if (value !== null) {
if (__DEV__) {
Expand Down Expand Up @@ -782,8 +782,13 @@ function pushStartOption(
break;
}
}
} else if (selectedValue === stringValue) {
target.push(selectedMarkerAttribute);
} else {
if (__DEV__) {
checkAttributeStringCoercion(selectedValue, 'select.value');
}
if ('' + selectedValue === stringValue) {
target.push(selectedMarkerAttribute);
}
}
} else if (selected) {
target.push(selectedMarkerAttribute);
Expand Down

0 comments on commit 7967240

Please sign in to comment.