Я пытаюсь использовать вложенные реквизиты рендеринга, чтобы создать кнопку, которая по выбору принимает значок, который, в свою очередь, по желанию принимает всплывающую подсказку, которая будет отображаться при наведении или нажатии на значок. Я думаю, что для этого мне нужно будет передать ссылку на Icon
дочернему компоненту Tooltip
.
На основании того, что я прочитал здесь Я делаю
// Icon
componentDidMount() {
this.iconInstance = ReactDOM.findDOMNode(this);
console.log('Icon mounted, instance', this.iconInstance);
}
render() {
console.log('Icon render iconInstance', this.iconInstance);
return (
<span style={{ display: 'inline' }}>
<span>{this.props.iconText}</span>
{this.props.tooltip({ iconInstance: this.iconInstance })}
</span>
);
}
А затем в Tooltip
будет добавлен слушатель
componentDidMount() {
console.log('Tooltip mounted', this.props);
// fails because iconInstance is undefined
// this.props.iconInstance.addEventListener(
// this.props.mouseEvent,
// this.showTooltip
// );
}
Сразу после того, как я установил this.iconInstance
, он может быть зарегистрирован, так что, кажется, работает. Однако в функции рендеринга я получаю неопределенный.
Возможно, есть способ использовать forwardRef
для этого, однако я не смог найти способ передать компонент Tooltip
в качестве реквизита рендеринга из компонента App
через Icon
и добавить ref
поддержать его, например, {this.props.tooltip(this.iconInstance)}
получает сообщение об ошибке, в котором говорится, что вы не можете передавать ссылки таким образом, и это не удастся.
Полный код