Вот код, который Select
использует, чтобы проверить, соответствует ли выбранное значение значению MenuItem:
function areEqualValues(a, b) {
if (typeof b === 'object' && b !== null) {
return a === b;
}
return String(a) === String(b);
}
https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Select/SelectInput.js#L9
Хотя объекты поддерживаются в качестве значений, по порядкудля совпадения двух объектов они должны быть точно таким же объектом (a === b
).
В вашем примере кодов и ящиков у вас есть:
const defaultOptions = [
{ friendly: "code1", combined: "[c1] - (code1)" },
{ friendly: "code2", combined: "[c2] - (code2)" }
];
const availableOptions = [
{ friendly: "code1", combined: "[c1] - (code1)" },
{ friendly: "code2", combined: "[c2] - (code2)" },
{ friendly: "code3", combined: "[c3] - (code3)" },
{ friendly: "code4", combined: "[c4] - (code4)" }
];
То есть 6уникальные предметы.Тот факт, что первые два defaultOptions имеют эквивалентное содержимое, как и первые два availableOptions, не имеет смысла для проверки ===
.
Вы можете исправить это, используя точно такие же объекты, как, например, следующие:
const availableOptions = [
{ friendly: "code1", combined: "[c1] - (code1)" },
{ friendly: "code2", combined: "[c2] - (code2)" },
{ friendly: "code3", combined: "[c3] - (code3)" },
{ friendly: "code4", combined: "[c4] - (code4)" }
];
const defaultOptions = availableOptions.slice(0, 2);
![Edit default options for Select](https://codesandbox.io/static/img/play-codesandbox.svg)