React Bootstrap Popover:初始化时预打开 Popover

React Bootstrap Popover: Pre-Open Popover on initialization

如何预打开(初始化为打开)React Bootstrap 弹出窗口?我有以下在初始关闭状态下工作的,

const popoverApproverNewAgreement = (
    <Popover id="popover-approverNewAgreement">
        <Popover.Title as="h3"></Popover.Title>
        <Popover.Content>
        Some text
        </Popover.Content>
    </Popover>
);

<OverlayTrigger trigger="click" rootClose placement="bottom" overlay={popoverApproverNewAgreement}>
    <a href="javascript:void(0)" className="more-info">
        <i className="fas fa-question-circle" aria-label="more information">
        </i>
    </a>
</OverlayTrigger>  

我无法让它与 OverlayTrigger 一起工作,但在更通用的 Overlay 上成功了,它需要一个 show={..} 这样你就可以 show/hide 有一个状态变量。

Overlay 需要如下 target ref

// Ref for Link or Button triggering overlay (required for <Overlay> usage)
const refLink = useRef(null); 

// State variable
const [overlayOpen, setOverlayOpen]  = useState(true); // Initially open

<a ref={refLink} href="javascript:void(0)" onClick={() => setOverlayOpen(!overlayOpen)}>
    <i className="fas fa-question-circle" aria-label="more information">
    </i>
</a>
<Overlay target={refLink.current} show={overlayOpen} 
         onHide={() => setOverlayOpen(false)} rootClose placement="bottom">
    {popoverApprover}
</Overlay>

我一直在寻找同样的问题,我发现 OverlayTrigger 有一个名为 defaultShow 的 属性(如果你想要默认行为)和一个 show 属性(你可以使用例如,通过使用 useState 定义的变量来操作组件)。 你可以在这里找到它: https://react-bootstrap.github.io/components/overlays/

编辑

接受的答案非常有效。但是您将不得不重新编写一些 OverlayTrigger 提供的 ready-to-use 代码 - 例如,如果您使用的是 OverlayTrigger,那么动态处理更新位置真的很容易。