Правильно ли добавлять window.addEventListener к методу componentDidMount в реакции?

Я создаю новое приложение для заметок с помощью реакции и создаю модальное окно для добавления новой заметки.

для закрытия модального окна я добавляю addEventListener к window в методе App.js componentDidMount

const modal = document.querySelector('.modal');
const windowOnClick = (event) => {
  if (event.target === modal) {
      modal.classList.toggle('showModal');
      this.setState({ isModalOpen: false });
  }
}
window.addEventListener('click', windowOnClick);

это работа, но я хочу знать, является ли это лучшей практикой, чтобы сделать это в ответ?

Нет, это обычный вариант использования. Если вы хотите закрыть модальное окно при нажатии в любом месте за пределами модального окна, это будет самый простой способ.

etarhan 09.04.2019 15:59

Спасибо за ответ @etarhan

Javad Ebrahimi 09.04.2019 22:16
Поведение ключевого слова "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) для оценки ваших знаний,...
3
2
2 202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Теперь вы можете сделать это в хуках,

что-то типа :

     function toggleModal() {
      const [isOpen, setModalState] = useState(false);

      useEffect(() => {
        const setToggle = () => setModalState(!isOpen);
        window.addEventListener('click', windowOnClick);
        return () => {
          window.removeEventListener('click', windowOnClick);
        };
      });

      return isOpen;
}

ИМХО, это, вероятно, более чистый способ. Поскольку React отходит от компонентов, основанных на классах (см. документацию React), и создает определенный хук для выполнения конкретной задачи, обычно в componentDidMount втискивается множество разных вещей, что, ИМХО, смешивает проблемы в методе жизненного цикла. Использование хука делает логику доступной и для других компонентов. См. документы React для получения дополнительной информации.

См. документы React для получения дополнительной информации.

Что делает это более «чистым», чем использование компонента класса и то же самое в жизненном цикле componentDidMount?

etarhan 09.04.2019 16:00

Да, я знаю, я не говорю, что вы не правы, но вы, возможно, могли бы добавить это объяснение к своему первоначальному ответу. Кроме того, как это отвечает на текущий вопрос? Не могли бы вы хотя бы привести пример использования пользовательского хука на основе текущего вопроса?

etarhan 09.04.2019 16:06

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