我正在使用Material-UI react库来渲染一些下拉菜单,使用<FormControl>
,<Select>
和<MenuItem>
组件。这个下拉菜单的选项数组非常大,我想在下拉菜单上设置一个max-height,这样它就不会变得太大。我目前正在努力做到这一点,我将在下面解释。
使用Material-UI的基本配置:
const MenuValidNotes = ({
schedule,
indexTrack,
indexSchedule,
actionSetTrackScheduleItemNote,
}) => {
const listNotesMenu = () => (
ARRAY_VALID_NOTES.map((noteObj, i) => (
<MenuItem
value={noteObj.note}
key={`track-item-${indexTrack}-schedule-${indexSchedule}-note-${i}`}
onClick={() => actionSetTrackScheduleItemNote(indexTrack, indexSchedule, noteObj.midiNumber)}
>{noteObj.note}</MenuItem>
))
)
return(
<div>
<FormControl>
<InputLabel>Note</InputLabel>
<Select
defaultValue={noteValueToNoteObject(schedule.noteValue).note}
>
{listNotesMenu()}
</Select>
</FormControl>
</div>
)
}
字符串
我发现的一种设置max-height的方法是在div中呈现<Select>
的子元素,给予一个类名并对其应用一些CSS。
但是,<Select>
组件要求其子组件是<MenuItem>s
,因此周围有<div>
会破坏value
属性,这意味着它不会显示正确的值。(在阅读Material-UI Select e.target.value is undefined时发现此问题)
const listNotesMenu = () => (
ARRAY_VALID_NOTES.map((noteObj, i) => (
<div className="..."> // this div will break the 'value' of the Select component
<MenuItem ... />
</div>
))
)
型
所以,理想情况下,我希望能够控制它的孩子的值和max-height。这可能吗?关于select的Material-UI文档没有这样的例子,<Select
组件的props列表不包括任何控制高度的字段。谢谢你的帮助。
(The上面的屏幕截图显示了这个问题。一个屏幕截图显示可以使用div Package 器控制max-height,但这会破坏值;另一个屏幕截图显示了没有div Package 器的控件,这意味着我们不能设置max-height)。
x1c 0d1x的数据
的
型
4条答案
按热度按时间ftf50wuq1#
要控制的高度是
Paper
元素,该元素由Menu
中的Popover
元素呈现。默认样式为
maxHeight: 'calc(100% - 96px)'
。下面是一个如何在Material-UI的v4中覆盖此内容的示例(v5示例更下方):
字符串
x1c 0d1x的数据
关键的方面是
MenuProps={{ classes: { paper: classes.menuPaper } }}
和menuPaper
样式的定义,下面是一个类似的示例,但针对的是Material-UI的v5。此示例利用了新的
sx
属性进行样式设置。型
的
gr8qqesn2#
2022使用MUI 4.12应答
如果这对你有帮助,上面的答案都不是正确的结构为我们的用例。我发现你只需要访问
Select
组件上的MenuProps
。像这样:字符串
yzuktlbb3#
在MUI文档中有一个部分,其中有
Select
的高度有限的示例。您可以设置Paper
的高度,这是Menu
中所有可扩展项的容器,这是使用MenuProps
的Select
的弹出窗口,如下所示:个字符
现场演示
的数据
gstyhher4#
我还想补充一点,如果你直接使用
TextField
而不是Select
,你可以这样做:字符串