首页 > 解决方案 > 自定义组件上的 OverlayTrigger 不起作用

问题描述

当自定义组件(按钮)悬停时,我试图显示一个 Popover:

class MyComponent extends React.PureComponent<MyComponentProperties>  {
    public render(): JSX.Element {
        const overlay: JSX.Element = (
            <Popover id={this.uuid}>
                <Popover.Content>
                    Hello world!
                </Popover.Content>
            </Popover>
        );

        return <OverlayTrigger trigger="hover" placement="auto" delay={{show : 700, hide : 0}} overlay={overlay}>
            <MyFancyButton ... />
        </OverlayTrigger >
    }
}
class MyFancyButton extends React.PureComponent<MyFancyButtonProperties> {
    public render(): JSX.Element {
        return <button ...>Hover me!</button>
    }
}

Popover 不显示。但是,如果我将render函数的返回更改MyComponent为:

return <OverlayTrigger trigger="hover" placement="auto" delay={{show : 700, hide : 0}} overlay={overlay}>
    <button>Hover me!</button>
</OverlayTrigger >

我检查了https://react-bootstrap.github.io/components/overlays/#overlay-trigger它说:

请注意,触发组件必须能够接受 ref,因为它将尝试添加一个。您可以将 forwardRef() 用于功能组件。

我不知道该怎么做。我尝试ref在其中添加一个属性MyFancyButtonProperties并将其转发到button,但它不起作用:

class MyFancyButton extends React.PureComponent<MyFancyButtonProperties> {
    public render(): JSX.Element {
        return <button ref={this.props.ref} ...>Hover me!</button>
    }
}

我的版本:

标签: reactjsreact-bootstrap

解决方案


我终于在这里找到了解决方案:https ://github.com/react-bootstrap/react-bootstrap/issues/2208#issuecomment-301737531

我修改了to的render功能MyComponent

return <OverlayTrigger trigger="hover" placement="auto" delay={{show : 700, hide : 0}} overlay={overlay}>
    <span><MyFancyButton ... /></span>
</OverlayTrigger >

现在它可以工作了。


推荐阅读