OverlayTrigger на пользовательском компоненте не работает

Я пытаюсь показать всплывающее окно, когда пользовательский компонент (кнопка) зависает:

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 и говорит:

Обратите внимание, что запускающие компоненты должны иметь возможность принимать ссылку, поскольку будут пытаться ее добавить. Вы можете использовать forwardRef () для функциональных компонентов.

Я не знаю, как это сделать. Я попытался добавить свойство ref в MyFancyButtonProperties и переслать его на button, но это не сработало:

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

Мои версии:

  • Реагировать 16.8.6
  • React bootstrap 1.0.0-beta.14

person Simon Arsenault    schedule 26.02.2020    source источник
comment
Я задал похожий вопрос, чтобы понять, почему forwardRef не работает правильно с начальной загрузкой: stackoverflow.com/questions/60875068/   -  person amaster    schedule 26.03.2020


Ответы (1)


Я наконец нашел здесь решение: https://github.com/react-bootstrap/react-bootstrap/issues/2208#issuecomment-301737531

Я изменил render функцию MyComponent на

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

и теперь это работает.

person Simon Arsenault    schedule 26.02.2020