有条件地渲染图像时,React 中的图像闪烁问题

IT技术 reactjs dom-events conditional-rendering
2021-05-23 01:32:01

我有一个标题,当鼠标悬停在标题上方时,我想在其右侧显示一个图像。

  • 在设置为 true/false 的状态下维护一个变量editMode

  • 然后我使用 onMouseOver 和 onMouse 事件有条件地渲染图像。

现在,当我将鼠标悬停在标题上时,编辑模式设置为 true 并显示图像,当我将光标移出标题时,editMode 设置为 false 并且图像消失。

在设置为 true/false 的状态下维护一个变量editMode,有条件地使用 onMouseOver 和 onMouse 渲染图像:

问题:当我将鼠标悬停在编辑图标上时,它开始闪烁。

class TempComponent extends React.Component {
constructor() {
    super()
    this.editModeToggler = this.editModeToggler.bind(this)
    this.state = {
        editMode: false
    }
}

editModeToggler() {
    console.log('called')
    this.setState({editMode: !this.state.editMode})
}

render() {
  return(
    <div>
      <h3
        onMouseOut={this.editModeToggler} 
        onMouseOver={this.editModeToggler}
      >
        Title
      </h3>
      {this.state.editMode?
            <img src='http://www.rebanet.it/images/banners/iscrizioni.png' />
        :
        null
      }
    </div>
  )
 }
}

您可以在此处找到此代码:http : //jsfiddle.net/Lu4w4v1c/2/

我如何停止这种闪烁。我也试过按照这里的建议使用 onMouseEnter 和 onMouseLeave但它没有用。我不知道如何使用这两个事件导致与我想要的相反。第一次加载组件时,一切都很好,但是一旦我将鼠标悬停在图标上,整个动态就会发生变化。当鼠标不在标题上时显示图标,当鼠标在标题上时不显示。请帮忙

onMouseEnter 和 onMouseLeave 的代码在这里:http : //jsfiddle.net/Lu4w4v1c/3/

2个回答

当您在 h3 上安装监听器时,最初不会渲染图像,因此第一次似乎一切正常,但是一旦渲染图像并将鼠标悬停在图像上,它就会响应标题的 mouseout 事件并隐藏图像立即触发 h3 上的鼠标悬停,导致闪烁行为。

要解决您的问题,您只需将侦听器附加到容器上即可。更新你的小提琴http://jsfiddle.net/Lu4w4v1c/4/

<div  onMouseOut={this.editModeToggler} 
    onMouseOver={this.editModeToggler}>
  <h3>
    Title
  </h3>
  {this.state.editMode?
        <img src='http://www.rebanet.it/images/banners/iscrizioni.png' />
    :
    null
  }
</div>

如果您有一个容器要执行在内部呈现 div 的 onmouseover 事件,则应使用 onMouseLeave。示例小提琴也有 onmouseleave 。

https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseleave_mouseout

这说明了问题