我目前从工作中获得了一个工具提示组件,这些组件都很不错,因此我制作了一个工具提示包装器来满足额外的要求。
问题是当我点击另一个工具时,我想关闭工具提示的所有其他实例。我已经为窗口添加了click事件监听器,因此每当我单击else ware时,工具提示的任何实例都将关闭。我遇到的问题是,当我单击另一个工具提示时,此handleWindowClick
事件不会触发,因此,我能够一次打开多个工具提示。如果要求是,每当打开一个工具提示时,其他工具都会关闭,因此一次只能打开一个工具提示。
import { Tooltip } from "Tooltip";
import React, { Component } from "react";
export default class TooltipWrapper extends Component {
constructor() {
super();
this.handleWindowClick = this.handleWindowClick.bind(this);
this.toggleTooltip = this.toggleTooltip.bind(this);
this.onTooltipClosed = this.onTooltipClosed.bind(this);
this.state = {
show: false
};
}
componentDidMount() {
window.addEventListener('click', this.handleWindowClick);
}
componentWillUnmount() {
window.removeEventListener('click', this.handleWindowClick);
}
toggleTooltip() {
this.setState({
show: !this.state.show
});
}
handleWindowClick(event) {
this.setState({
show: false
});
}
onTooltipClosed() {
this.setState({
show: false
});
}
render() {
return (
<Tooltip
open={this.state.show}
tip={this.props.tip}
position="bottom"
closeButton="visible"
onClose={this.onTooltipClosed}
>
<div onClick={this.toggleTooltip}>{this.props.children}</div>
</Tooltip>
);
}
}
答案 0 :(得分:1)
也许将点击侦听器添加到正文可能会对您有所帮助,请尝试以下操作:
document.body.addEventListener('click', this.onClickBody);