Найдите идентификатор div, используя объект события onMouseOver

Я написал приведенный ниже код, чтобы захватить id для div, когда пользователь hovers находится над div.

<div className = "part-3" id = "graph-1" onMouseEnter = {handleHover}> 
  <h3 className = "chartHeader">Avg. marks per subject </h3>
     {<MarksDisplayTable/>}
</div>

Моя функция handleHover выглядит так:

    const handleHover = (event) => {
      console.dir("event = " + Object.keys(event));
      }

Я ожидал, что ключ target будет содержать id для div. Но он состоит только из двух закрытых ключей.

Выход - event = __reactFiber$593cb2h2ba,__reactProps$593cb2h2ba

Как я могу захватить действие id = graph-1 с помощью действия onMouseEnter?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
51
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

вы можете использовать event.currentTarget.id. Если вы задаетесь вопросом, использовать ли currentTarget или target, текущая цель захватит родителя <div> независимо от того, наводите ли вы курсор на его дочерние элементы. Цель поймает детей, если вы наведете на них курсор.

function App(){
  const handleHover = (event) => {
      const { id } = event.currentTarget
      console.info(event.currentTarget)
      console.info(event.target)
      console.info(id)
  }
  
  return (
    <div className = "part-3" id = "graph-1" onMouseEnter = {handleHover}> 
      <h3 className = "chartHeader">Avg. marks per subject </h3>
         <span>Something</span>
    </div>
  );
};


ReactDOM.render(<App />, document.getElementById("app"));
<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id = "app"></div>

Спасибо. Теперь я могу получить правильный идентификатор, независимо от того, наводит ли пользователь курсор на дочерний элемент.

ForeverLearner 17.07.2024 23:27

Чтобы захватить iddiv, когда пользователь наводит на него курсор, используя событие onMouseEnter в React, вы можете получить доступ к свойству target объекта события. Свойство target предоставит вам элемент DOM, вызвавший событие, и оттуда вы сможете получить доступ к его атрибутам, включая id.

Вот как вы можете получить id.

function App() {
  const handleHover = (event) => {
    const target = event.currentTarget;
    const id = target.id;
    console.info("id:", id);
  };
  
  return (
    <div className='App'>
      <div className = "part-3" id = "graph-1" onMouseEnter = {handleHover}> 
        <h3 className = "chartHeader">Avg. marks per subject</h3>
      </div>
    </div>
  );
}

const rootElement = document.getElementById('root');
ReactDOM.render(<App />, rootElement);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.0.0/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.0.0/umd/react-dom.production.min.js"></script>
<script src = "https://unpkg.com/@babel/standalone/babel.min.js"></script>

<div id = "root"></div>

В этом сценарии вы могли бы использовать event.target вместо event.currentTarget. Однако, чтобы надежно зафиксировать id, когда пользователь наводит курсор на div, вам следует использовать event.currentTarget, поскольку event.currentTarget всегда относится к элементу, к которому прикреплен обработчик событий.

В вашем случае он последовательно ссылается на элемент div с прослушивателем событий onMouseEnter, тогда как event.target относится к элементу, который фактически инициировал событие. Если пользователь наводит курсор на дочерний элемент внутри div (например, элемент <h3>), event.target будет указывать на этот конкретный дочерний элемент.

спасибо, хорошо объяснил. Я могу выбрать только один правильный ответ :)

ForeverLearner 18.07.2024 08:19

const { useRef } = React;

const Example = () => {
  const divRef = useRef(null);
  
  const handleHover = () => {
    console.info(divRef.current.id)
  }

  return (
   <div ref = {divRef} id = "im-the-id-you-are-looking-for" onMouseEnter = {handleHover}>
      give me the id!!
    </div>
  );
};

ReactDOM.createRoot(
  document.getElementById("root")
).render(
  <Example />
);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<div id = "root"></div>

вы также можете использовать useRef...

Хорошая мысль, спасибо +1

ForeverLearner 18.07.2024 13:27

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