SelectField 的控制弹出窗口位置锚点

Control popover location anchor for SelectField

有谁知道如何控制SelectField的popover的位置吗?

我知道 selectfield 中有一个下拉菜单并且不包含弹出窗口,但我认为也许可以通过某种方式控制它。

我实际上遇到了同样的问题。

我认为这不可能,至少它不是可配置属性的一部分。我查看了 SelectField 源代码,显然,即使 SelectField 在下面使用 DropDownMenu,并且 DropDown 在下面使用 PopOver,但是 anchorOrigin 的配置是硬编码。

https://github.com/callemall/material-ui/blob/master/src/DropDownMenu/DropDownMenu.js#L9

const anchorOrigin = {
  vertical: 'top',
  horizontal: 'left',
}; 

您可以使用 SelectField 组件中的道具 dropDownMenuProps 覆盖下拉菜单道具。

确实有可能:

<SelectField dropDownMenuProps={{anchorOrigin:{vertical:"center",horizontal:"left"}}}>
    <MenuItem value={1} primaryText="one" />
    <MenuItem value={2} primaryText="two" />
    <MenuItem value={3} primaryText="three" />
</SelectField>

如果您需要准确设置 "popover"(实际上是 "dropdown menu")的定位,我认为您可以尝试覆盖其中一个不同的(样式?)道具该菜单:http://www.material-ui.com/#/components/dropdown-menu("Properties" 部分)

另一种方法是使用弹出窗口...

此外,新的 v1.0 测试版刚刚发布了 select 组件;它可能会给你更好的控制: https://material-ui-1dab0.firebaseapp.com/demos/selects/

以下是 material-ui v4.11.3(2021 年初)的实现方式:

<Select
  value={10}
  MenuProps={{
    anchorOrigin: {
      vertical: "top",
      horizontal: "left",
    },
    transformOrigin: {
      vertical: "bottom",
      horizontal: "left",
    },
    getContentAnchorEl: null,
  }}
>
  <MenuItem value={10}>Ten</MenuItem>
  <MenuItem value={20}>Twenty</MenuItem>
  <MenuItem value={30}>Thirty</MenuItem>
</Select>

getContentAnchorEl: null 道具基本上定位渲染的 Popover 使其粘附在 Select 组件上并且不会偏离。