React Date Picker is Being Behind Behind Overflow Parent (popover fixed placement issue)
React Date Picker is Being Hidden Behind Overflow Parent (popover fixed placement issue)
我正在尝试从 material UI 菜单项中打开来自 React 日期选择器的日期选择弹出窗口。
我已将我的菜单项设为反应日期选择器输入字段。问题是我的输入字段是选择日期弹出窗口的锚点,弹出窗口在我的菜单中打开。我希望弹出窗口在菜单上方打开。
react datepicker 文档没有很多关于 popover 放置的信息。知道如何实现吗?
here is a screenshot of the unwanted behavior with the popover being "trapped" in the menu
我的菜单代码快速概览:
// this icon is the anchor for the menu
<MoreIcon onClick={handleClick} />
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
//this is my Date picker component
<Reschedule handleReschedule={handleReschedule} />
</Menu>
和我的日期选择器组件(将自定义输入字段作为菜单项):
export const Reschedule = ({ handleReschedule }) => {
// ref to the datePicker to control open/close
const calendar = createRef();
//to Open the date picker
const openDatepicker = (e) => {
calendar.current.setOpen(true);
};
//to close the date picker
const closeDatepicker = (e) => {
calendar.current.setOpen(false);
};
const RescheduleButton = ({ onClick }) => {
return (
<MenuItem
className="overdue__rescheduleButton"
onClick={() => {
onClick();
}}
>
Reschedule
</MenuItem>
);
};
return (
<DatePicker
selected={null}
onChange={(date) => {
handleReschedule(date);
}}
ref={calendar}
minDate={subDays(new Date(), 0)}
customInput={<RescheduleButton onClick={openDatepicker} />}
popperPlacement="bottom-end"
/>
);
};
提前致谢
在撰写本文时此道具尚未记录,但您可以使用 popperProps
来配置 popper 属性 - 他们使用 Popper.js。在您的情况下,使用 positionFixed: true
以便它相对于视口的初始包含块(即 <html>
)
<DatePicker
popperProps={{
positionFixed: true // use this to make the popper position: fixed
}}
/>
https://github.com/Hacker0x01/react-datepicker/blob/master/src/popper_component.jsx
实现此目的的另一种方法是为 React 日期选择器提供要将选择器附加到的 div 的 ID。例如,在您的应用程序的最顶部附近的 div:
<DatePicker
portalId="root"
/>
我正在尝试从 material UI 菜单项中打开来自 React 日期选择器的日期选择弹出窗口。
我已将我的菜单项设为反应日期选择器输入字段。问题是我的输入字段是选择日期弹出窗口的锚点,弹出窗口在我的菜单中打开。我希望弹出窗口在菜单上方打开。
react datepicker 文档没有很多关于 popover 放置的信息。知道如何实现吗?
here is a screenshot of the unwanted behavior with the popover being "trapped" in the menu
我的菜单代码快速概览:
// this icon is the anchor for the menu
<MoreIcon onClick={handleClick} />
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
//this is my Date picker component
<Reschedule handleReschedule={handleReschedule} />
</Menu>
和我的日期选择器组件(将自定义输入字段作为菜单项):
export const Reschedule = ({ handleReschedule }) => {
// ref to the datePicker to control open/close
const calendar = createRef();
//to Open the date picker
const openDatepicker = (e) => {
calendar.current.setOpen(true);
};
//to close the date picker
const closeDatepicker = (e) => {
calendar.current.setOpen(false);
};
const RescheduleButton = ({ onClick }) => {
return (
<MenuItem
className="overdue__rescheduleButton"
onClick={() => {
onClick();
}}
>
Reschedule
</MenuItem>
);
};
return (
<DatePicker
selected={null}
onChange={(date) => {
handleReschedule(date);
}}
ref={calendar}
minDate={subDays(new Date(), 0)}
customInput={<RescheduleButton onClick={openDatepicker} />}
popperPlacement="bottom-end"
/>
);
};
提前致谢
在撰写本文时此道具尚未记录,但您可以使用 popperProps
来配置 popper 属性 - 他们使用 Popper.js。在您的情况下,使用 positionFixed: true
以便它相对于视口的初始包含块(即 <html>
)
<DatePicker
popperProps={{
positionFixed: true // use this to make the popper position: fixed
}}
/>
https://github.com/Hacker0x01/react-datepicker/blob/master/src/popper_component.jsx
实现此目的的另一种方法是为 React 日期选择器提供要将选择器附加到的 div 的 ID。例如,在您的应用程序的最顶部附近的 div:
<DatePicker
portalId="root"
/>