Я думаю, что ваш первый пример - это тот, который вы хотите создать с помощью компонента DropDown
. Попробуйте удалить DropDownMenu
компонент и выполнить всю логику внутри DropDown
:
import React from "react";
import TextField from "material-ui/TextField";
import MenuItem from "material-ui/Menu/MenuItem";
const styles = {
minWidth: 175
};
class DropDown extends React.Component {
render() {
return (
<TextField
select
label={this.props.label}
value={this.props.value}
style={styles}
onChange={this.props.onChange}
margin="normal"
InputLabelProps={{
shrink: true
}}
>
{this.props.menuData.map(option => (
<MenuItem key={option.value} value={option.value}>
{option.label}
</MenuItem>
))}
</TextField>
);
}
}
export default DropDown;
И тогда вы можете использовать его так, как вы хотите:
<DropDown
label="Drop Down Label"
value={this.state.selectedState}
onChange={this.handleChange}
menuData={stateAbbreviationData} // <-- Put in braces
/>
Примечание:
В интерфейсе Material я использовал компоненты MenuItem
внутри компонента Select
, а не компонент TextField
, как вы это делаете:
https://material -ui.com / демки / выбирает /
Была пара проблем с вашим существующим кодом, на которые я укажу.
Как я указывал выше, вам нужно передать данные stateAbbreviationData
в подпорки DropDown
компонента, используя фигурные скобки:
<DropDown
label="Drop Down Label"
value={this.state.selectedState}
onChange={this.handleChange}
menuData={stateAbbreviationData} // <-- This change
menuKey={stateAbbreviationData.value}
menuValue={stateAbbreviationData.value}
menuOptionLabel={stateAbbreviationData.label}
/>
Есть еще одна ошибка с настройкой реквизита menuKey
, menuValue
и manuOptionLabel
. С включенным кодом кажется, что stateAbbreviationData
является массивом объектов.
В реквизитах вы пытаетесь получить доступ к свойствам этого массива, которые не существуют: stateAbbreviationData.value
и stateAbbreviationData.label
. Объекты в массиве имеют эти биты, а сам массив - нет.
<DropDown
label="Drop Down Label"
value={this.state.selectedState}
onChange={this.handleChange}
menuData={stateAbbreviationData}
menuKey={stateAbbreviationData.value} // <-- Doesn't exist
menuValue={stateAbbreviationData.value} // <-- Doesn't exist
menuOptionLabel={stateAbbreviationData.label} // <-- Doesn't exist
/>
Также есть ошибка, когда вы передаете menuData
компоненту TextField
, но вместо этого вы должны передать его DropDownMenu
.
Тем не менее, я рекомендую перейти к первому предложенному мною решению. Удачи!