Material-UI Select e.target.value未定义

时间:2019-11-19 07:55:40

标签: reactjs material-ui

我在我的React项目之一中使用Material-UI的Select组件。我要求将下拉数据分组显示,因此我使用的是<MenuItem>周围的<ListSubheader>。我很难获得MenuItem的价值。如果我的代码有任何明显错误,请告诉我。

<FormControl>
    <InputLabel>Product type</InputLabel>
    <Select
    id="product-type"
    input={<Input id="grouped-select" />}
    value={this.state.productType}
    autoWidth={true}
    style={{ width: 200 }}
    onChange={(e, child) => {
        console.log(e.target.value); // undefined!
    }}
    >
    {this.state.productList.map((p, i) => {
        const list = p[1];

        let items = list.map((e, j) => {
        return (
            <MenuItem key={j} value={e.name}>
            {e.name}
            </MenuItem>
        );
        });

        return (
        <div>
            <ListSubheader key={i}>{p[0]}</ListSubheader>
            {items}
        </div>
        );
    })}
    </Select>
</FormControl>

2 个答案:

答案 0 :(得分:1)

e.target.value返回未定义的原因是因为MenuItem不是Select的直接子元素。由于productList是动态设置在下拉菜单中的,因此必须采用以下方式呈现:

ListSubheader0
   Item0
   Item1
ListSubheader1
   Item2
   Item3
   Item4
   ...
...

我没有将我的ListSubheaderMenuItem包裹在div标记中,不可能读取target.value的情况下,我返回了一个数组。

return [
    <ListSubheader key={i}>
        {p[0]}
    </ListSubheader>, 
    items
];

答案 1 :(得分:0)

Material-ui选择直接子级必须是MenuItem:

  

⚠️当native为时,MenuItem元素必须是直接后代   错误。

您需要相应地更改代码,以使MenuItemSelect的直接子代。像这样:

<MenuItem key={i} value={p[0]}>
    <ListSubheader key={i}>{p[0]}</ListSubheader>
    {items}
</MenuItem>

它看起来可能有所不同,但是e.target.value现在不会是不确定的。