Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: useeffect

Как в функциональных компонентах подписаться на события?

Проверяет знание работы с событиями в функциональных компонентах React.

Короткий ответ

В функциональных компонентах можно подписаться на события, используя useEffect для side-эффектов или напрямую добавляя обработчики на элементы (например, onClick). Для отписки от событий (например, resize, scroll) нужно возвращать функцию очистки из useEffect.

Длинный ответ

1. Подписка на DOM-события (например, клик, скролл):

import { useEffect } from 'react';

function MyComponent() {
  	const handleClick = () => {
    		console.log('Клик!');
 	 };

  	useEffect(() => {
    		window.addEventListener('resize', handleResize);
    		return () => window.removeEventListener('resize', handleResize); // Отписка
  	}, []);

  	return <button onClick={handleClick}>Нажми меня</button>;
}

2. Кастомные события (например, WebSocket, EventEmitter):

useEffect(() => {
  	const subscription = someEventEmitter.on('update', handleUpdate);
  	return () => subscription.unsubscribe(); // Отписка
}, []);

3. React-события (например, onClick, onChange):

function Form() {
  	const handleSubmit = (e) => {
    		e.preventDefault();
    		console.log('Форма отправлена!');
  	};

  	return <form onSubmit={handleSubmit}>...</form>;
}

 Итог:

  • Для DOM-событий (resize, scroll) используй useEffect + отписку.

  • Для кастомных событий (WebSocket, EventEmitter) также нужен useEffect.

  • Для React-событий (onClick, onSubmit) обработчики вешаются напрямую.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • React

    React

Ключевые слова

#useeffect

Подпишись на React Developer в телеграм