加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 如何使React中的onMouseLeave包含子上下文?

发布时间:2020-12-15 20:45:31 所属栏目:百科 来源:网络整理
导读:我目前正在构建一个下拉按钮来学习React.我在父div中创建了两个onMouseEnter和onMouseLeave事件,使其在悬停时可见,而不是.问题是这些事件只会影响父母. 如何使用React中的onMouseLeave包含子上下文? 或者,当我在徘徊在孩子身上时,如何保持状态扩展? class
我目前正在构建一个下拉按钮来学习React.我在父div中创建了两个onMouseEnter和onMouseLeave事件,使其在悬停时可见,而不是.问题是这些事件只会影响父母.

如何使用React中的onMouseLeave包含子上下文?
或者,当我在徘徊在孩子身上时,如何保持状态扩展?

class DropDownButton extends React.Component {
constructor(){
    super();
    this.handleHoverOn = this.handleHoverOn.bind(this);
    this.handleHoverOff = this.handleHoverOff.bind(this);
    this.state = {expand: false};
}

handleHoverOn(){
    if(this.props.hover){
        this.setState({expand: true});
    }
}

handleHoverOff(){
    if(this.props.hover){
        this.setState({expand: false});
    }
}

render() {
    return (
        <div>
            <div className={styles.listTitle}
            onMouseEnter={this.handleHoverOn}
            onMouseLeave={this.handleHoverOff}>
            {this.props.name}
            </div>
            <div>
            {React.Children.map(this.props.children,function(child){
            return React.cloneElement(child,{className: 'child'});
            })}
            </div>
        </div>
     );
}
}
你的DOM中有两个不重叠的div;我会拆分渲染,所以更明显:
render() {
    return (
        <div>

            <div className={styles.listTitle}
              onMouseEnter={this.handleHoverOn}
              onMouseLeave={this.handleHoverOff}>
                {this.props.name}
            </div>

            <div>
                {React.Children.map(this.props.children,function(child){
                    return React.cloneElement(child,{className: 'child'});
                })}
            </div>

        </div>
     );
}

附加了onMouseLeave的div不包含子项;所以,当鼠标移动到孩子上时,它会离开div并调用this.handleHoverOff.

您可以考虑使用CSS隐藏子项,如果它们不应显示或有条件地呈现它们:

render() {
    return (
        <div className={styles.listTitle}
          onMouseEnter={this.handleHoverOn}
          onMouseLeave={this.handleHoverOff}>
            {this.props.name}
            {this.state.expanded && this.renderChildren()}
        </div>
     );
},renderChildren() {
    return (
        <div>
            {React.Children.map(this.props.children,function(child){
                return React.cloneElement(child,{className: 'child'});
            })}
        </div>
    );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读