反应-如何关闭所有其他工具提示?

时间:2018-08-20 08:39:56

标签: javascript reactjs

我目前从工作中获得了一个工具提示组件,这些组件都很不错,因此我制作了一个工具提示包装器来满足额外的要求。

问题是当我点击另一个工具时,我想关闭工具提示的所有其他实例。我已经为窗口添加了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>
        );
    }
}

1 个答案:

答案 0 :(得分:1)

也许将点击侦听器添加到正文可能会对您有所帮助,请尝试以下操作:

document.body.addEventListener('click', this.onClickBody);