悬停鼠标事件错误 React

onhover mousevent bug React

我想问一下为什么我的实现不工作以及如何实现?

我只是想在悬停一个元素(图像- "the I spell")时弹出一个 window(包含简短描述)

问题:我的按钮部分工作

import React from "react";
import "./PopUp_Example.css";
import info_button from "../../assets/Card/info-button.svg";

class PopUp_Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      open: true
    };
    this.toggleHover_open = this.toggleHover_open.bind(this);
    this.toggleHover_close = this.toggleHover_close.bind(this);
  }
  toggleHover_open() {
    this.setState({ open: true });
  }
  toggleHover_close() {
    this.setState({ open: false });
  }
  render() {
    let changing_css_class;
    if (this.state.open) {
      changing_css_class = "appear";
    } else {
      changing_css_class = "vanish";
    }
    return (
      <div className="popup_container">
        <div className={changing_css_class}>
          <p>Pop Up text</p>
        </div>

        <div className="something">
          <div
            className="info"
            onMouseLeave={this.toggleHover_close}
            onMouseEnter={this.toggleHover_open}
          >
            <img src={info_button} alt="I button image" />
          </div>
          <div>Something on the page</div>
        </div>
      </div>
    );
  }
}
export default PopUp_Example;
.popup_container{
  position: relative;
  top:20px;
  display: flex;
  flex-direction: column;
  border: 3px solid red;
  width:100%;
}
.something{
  display: flex;
}
.info{
  width: 2rem;;
}
.appear{
  width:100%;
  border:3px solid green;
}
.hidden{
  display: none;
}

没有错误。仅在 Google Chrome 开发工具中 onMouseLeave 和 onMouseEnter 鼠标事件不起作用。你必须点击那里。

但这里有一点点优雅和现代的代码。

import React, {useState} from 'react'
import './PopUp_Example.css';
import info_button from '../../assets/Card/info-button.svg';

const PopUp_Example = props => {
    const [toogleState, setToogleState] = useState({
        toogles: [
           { number1: false}           
        ]
    });   

const toogleHandler_in = () =>{
    setToogleState ({
        toogles: [
            { number1: true},           
     ] 
    }); 
};

const toogleHandler_out = () =>{
    setToogleState ({
        toogles: [
            { number1: false},           
     ] 
    }); 
};

var changing_css_class;
if (toogleState.toogles[0].number1) {
  changing_css_class = "appear";
} else {
  changing_css_class = "hidden";
}   

     return (
         <div className="popup_container">                                        
                <div className={changing_css_class}>
                    <p >Pop Up text</p>        
                 </div>             

        <div className="something">
                <div className="info" onMouseLeave={toogleHandler_out} onMouseEnter={toogleHandler_in} >                            
                     <img src={info_button} alt='I button image'/>
                 </div> 
                    <div>Something on the page</div>  
                </div>
         </div>
    )
}
 export default PopUp_Example;