React - событие onKeyDown

Я создаю свой собственный лайтбокс в React, и у меня проблема с реализацией события keyDown. Когда я открываю образ, я хочу иметь ключ a для образа - 1 и ключ d для образа + 1. Я реализовал console.info(e.key) только для того, чтобы проверить, все ли работает правильно. И я обнаружил проблему, что мое событие KeyDown работает только тогда, когда я фокусируюсь на кнопке слева или справа. Когда я нажимаю на фото, клавиши не работают.

Лайтбокс:

<div 
  onKeyDown = {this.nextButtonImage} 
  onClick = {this.closeLightbox} 
  className = "lightbox-container">
  <div className = "lightbox">
    <button onClick = {this.closeLightbox} className = "lg-close">
      <i className = "fas fa-times" />
    </button>
    <button onClick = {this.prevImage} className = "lg-arrows lg-left">
      <i className = "fas fa-caret-left" />
    </button>
    <button onClick = {this.nextImage} className = "lg-arrows lg-right">
      <i className = "fas fa-caret-right" />
    </button>
    <img src = {this.images[this.state.openImage].url} alt = "" />
  </div>
</div>

событие keyDown:

nextButtonImage = (e) => {
  console.info(e.key);
}
Поведение ключевого слова "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) для оценки ваших знаний,...
5
0
573
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это правильно, потому что событие keydown привязано к элементу. Контекст по умолчанию становится полезным, когда вы работаете с входами. Когда вам нужно глобальное событие (поскольку события распространяются сверху / вниз), вы можете полагаться на объект окна или объект документа:

componentDidMount(){
  document.addEventListener('keydown', (event) => {
    const keyName = event.key;
    alert('keydown event\n\n' + 'key: ' + keyName);
  });
}

componentWillUnmount(){ 
  // Remove the listener before unmount
}

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