简体   繁体   English

反应:将事件侦听器添加到没有包装html标签的道具

[英]React: Add Event Listener to props without wrapper html tag

I would like to add Event onMouseEnter to component prop without wrapper HTML tag. 我想在没有包装HTML标记的情况下将Event onMouseEnter添加到组件prop。

var tooltipText = this.props.children;
<span onMouseEnter={this.renderTooltip}>{tooltipText}</span>

Is it possible add this event to this.props.children , because I can't afford on the wrapper span. 是否有可能将此事件添加到this.props.children ,因为我负担不起包装范围。

Here is all component code: 这是所有组件代码:

class FastTooltip extends Component{
    constructor(props){
        super(props);
        this.renderTooltip = this.renderTooltip.bind(this);
        this.state = {
            tooltip: false,
        }; 
    }
    renderTooltip(){
        this.setState({ tooltip: true });
    }
    render(){
        var renderTooltip;
        var { overlay, placement } = this.props;
        var tooltipText = this.props.children;

        if( this.state.tooltip ){
            renderTooltip = <OverlayTrigger placement={placement} overlay={<Tooltip>{overlay}</Tooltip>}>
                                {tooltipText}
                            </OverlayTrigger>
        } else {
            renderTooltip = <span onMouseEnter={this.renderTooltip}>{tooltipText}</span>
        }

        return renderTooltip;

    }
}

If I understand correctly, you could map your component's children and return a new element with an event handler. 如果我理解正确,则可以映射组件的子代,并使用事件处理程序返回一个新元素。 Does something like this get you on the right track? 这样的事情会让您走上正轨吗?

class FastTooltip extends Component {
    render() {
        return React.Children.map(this.props.children, (child) => {
            return React.cloneElement(child, {
                onMouseEnter: () => { console.log('onMouseEnter'); }
            })
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM