我在我的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>
答案 0 :(得分:1)
e.target.value
返回未定义的原因是因为MenuItem
不是Select
的直接子元素。由于productList
是动态设置在下拉菜单中的,因此必须采用以下方式呈现:
ListSubheader0
Item0
Item1
ListSubheader1
Item2
Item3
Item4
...
...
我没有将我的ListSubheader
和MenuItem
包裹在div
标记中,不可能读取target.value
的情况下,我返回了一个数组。
return [
<ListSubheader key={i}>
{p[0]}
</ListSubheader>,
items
];
答案 1 :(得分:0)
Material-ui选择直接子级必须是MenuItem:
⚠️当native为时,MenuItem元素必须是直接后代 错误。
您需要相应地更改代码,以使MenuItem
是Select
的直接子代。像这样:
<MenuItem key={i} value={p[0]}>
<ListSubheader key={i}>{p[0]}</ListSubheader>
{items}
</MenuItem>
它看起来可能有所不同,但是e.target.value
现在不会是不确定的。