reactjs 如何在reactstrap弹出框中添加自动定位

ymdaylpp  于 2022-12-22  发布在  React
关注(0)|答案(1)|浏览(207)

我有一个弹出窗口,通过它显示下拉列表。当前位置设置为顶部。但是下拉列表占用了太多空间,所以我希望弹出窗口检测有多少空间,并相应地设置位置。
下面是弹出框的代码:

<Popover
          isOpen={this.state.showDropDown}
          target={`dropdownbutton-${id}`}
          toggle={this.toggle}
          className={`dropdown-with-tags-popover ${this.props.className}`}
          placement={this.props.placement || 'top'}
          flip={false}
        >
//code for list of users and search bar
</Popover>

如需进一步信息,请说明

sc4hvdpw

sc4hvdpw1#

要根据可用空间自动调整弹出框的位置,可以结合使用溢出和偏移属性以及某些计算。
以下是如何执行此操作的示例:

import { useRef, useEffect } from 'react';

const PopoverWithAdjustedPosition = (props) => {
  const dropdownRef = useRef(null);
  useEffect(() => {
    // Calculate the available space above and below the dropdown
    const dropdownRect = dropdownRef.current.getBoundingClientRect();
    const windowHeight = window.innerHeight;
    const spaceAbove = dropdownRect.top;
    const spaceBelow = windowHeight - dropdownRect.bottom;

    // Set the position of the popover based on the available space
    let placement = 'top';
    if (spaceBelow > spaceAbove) {
      placement = 'bottom';
    }
    props.setPlacement(placement);
  }, []);

  return (
    <div ref={dropdownRef}>
      <Popover
        {...props}
      >
        // Your dropdown content goes here
      </Popover>
    </div>
  );
};

useEffect钩子用于度量dropdown元素上下的可用空间,setPlacement函数用于根据可用空间更新Popover组件的放置 prop 。
然后,您可以在代码中使用PopoverWithAdjustedPosition组件(而不是Popover组件),并向其传递一个setPlacement函数以更新放置状态。

相关问题