Неожиданное поведение onMouseOver onMouseLeave в Reactjs

Я пытаюсь создать простой веб-сайт для практики React и Dom, но на простых onMouseOver и onMouseLeave у меня начинаются проблемы. Все, что я хочу, это скрыть другие буквы имени с помощью div при наведении на букву, которая вернется в исходное состояние при выходе из наведения.

Мне удалось добиться эффекта путем рендеринга разных div только тогда, когда относительная буква активна в состоянии, но похоже, что это дает эффект мерцания и неожиданное поведение. Я не знаю, может быть, это потому, что он перерисовывается и поэтому теряет наведение мыши. Есть ли у вас какие-либо предложения и объяснения?

Вот codepen с практикой https://codepen.io/anon/pen/JQLvQp

//example of a letter in css//
.L{
  display: flex;
  justify-content: space-between;
  font-size: 6rem;
  align-items: flex-start;
  height: 50vh;
  transform: translate(0rem, -15rem);
  width: 90%;
  margin: 0 auto;
  cursor: pointer;
}

#L1 {
  background-color: orangered;
  height: 9rem;
  flex: 1;
  animation: fadein1;
  animation-duration: 2s;

}

#L2 {
  height: 0;
  flex: 1;

}

#L3 {
  background-color: orangered;
  height: 9rem;
  flex: 5;  
  animation: fadein5;
  animation-duration: 2s;
}

@keyframes fadein1{
  0%{flex: 0}
  100%{flex: 1  }
}
@keyframes fadein5{
  0%{flex: 0}
  100%{flex: 5  }
}

// here's the actual code //

import './App.css';
import React, { Component } from 'react';



class Home extends Component {
  constructor(props) {
    super(props)

    this.funzionina = () => {
      console.info("casa")
    }

    this.state = {
      A: false,
      L: false,
      E: false,
      S: false,
      SS: false,
      I: false,
      O: false,
    }


  }


  render() {
    return (
      <div className = "papa" >
        <div className = "App">
          <div onMouseOver = {() => { this.state.A === false ? this.setState({ A: true }) : console.info("Casa") }} onMouseLeave = {() => this.setState({ A: false })}><h2> A</h2></div>
          <div onMouseOver = {() => this.setState({ L: true })} onMouseLeave = {() => this.setState({ L: false })}><h2> L</h2></div>
          <div onMouseOver = {() => this.setState({ E: true })} onMouseLeave = {() => this.setState({ E: false })}><h2> E</h2></div>
          <div onMouseOver = {() => this.setState({ S: true })} onMouseLeave = {() => this.setState({ S: false })}><h2> S</h2></div>
          <div onMouseOver = {() => this.setState({ SS: true })} onMouseLeave = {() => this.setState({ SS: false })}><h2> S</h2></div>
          <div onMouseOver = {() => this.setState({ I: true })} onMouseLeave = {() => this.setState({ I: false })}><h2> I</h2></div>
          <div onMouseOver = {() => this.setState({ O: true })} onMouseLeave = {() => this.setState({ O: false })}><h2> O</h2></div>
        </div>
        {this.state.A && <div className = "A"> <div id = "A1"> </div> <div id = "A2"> </div> <div id = "A3"> </div> </div>}
        {this.state.L && <div className = "L"> <div id = "L1"> </div> <div id = "L2"> </div> <div id = "L3"> </div> </div>}
        {this.state.E && <div className = "E"> <div id = "E1"> </div> <div id = "E2"> </div> <div id = "E3"> </div> </div>}
        {this.state.S && <div className = "S"> <div id = "S1"> </div> <div id = "S2"> </div> <div id = "S3"> </div> </div>}
        {this.state.SS && <div className = "SS"> <div id = "SS1"> </div> <div id = "SS2"> </div> <div id = "SS3"> </div> </div>}
        {this.state.I && <div className = "I"> <div id = "I1"> </div> <div id = "I2"> </div> <div id = "I3"> </div> </div>}
        {this.state.O && <div className = "O"> <div id = "O1"> </div> <div id = "O2"> </div> <div id = "O3"> </div> </div>}

      </div >

    )
  }

}

export default Home;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
441
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование onMouseOver или onMouseLeave на элементе DOM реагирует на любое движение от действия пользователя. Таким образом, в некотором смысле вы указываете, что состояние должно обновляться столько раз, сколько пользователь двигает мышью, что создает мерцание.

Возможно, вы захотите добавить к своим обработчикам функцию устранения дребезга, чтобы предотвратить постоянное обновление вашего состояния.

Вот пример того, как это реализовать: https://codepen.io/snesjhon/pen/ewMKdG

Вот еще объяснение функции устранения дребезга: Может ли кто-нибудь объяснить функцию "debounce" в Javascript

Другие вопросы по теме