Несколько экземпляров класса используют общую переменную. Как правильно сделать?
Пытаюсь понять, как принято решать такую задачу:

Есть несколько экземпляров класса, реагирующих на 'resize' окна. Для того, чтобы серия объектов не дергалась с каждым 'resize', я вешаю на 'resize' обработчик, который отрабатывает resize не чаще, чем раз в секунду, и в случае ресайза отправляет окну событие refreshed:
handleResize() {
let resizeTimeout;
return function() {
if (!resizeTimeout) {
resizeTimeout = setTimeout(function() {
resizeTimeout = null;
console.log('Push refresh event');
let refreshedEvent = new Event('refreshed');
window.dispatchEvent(refreshedEvent);
}, 1000);
}
};
}
Обработчик должен создаваться вместе с созданием первого экземпляра. Но я не понимаю, где хранить сам обработчик, и как каждый из объектов будет понимать, что обработчик уже создан. Приходится создавать глобальную переменную и ее проверять. Насколько это хорошая практика, и как поступают в таком случае?
Ответы (2 шт):
Глобальные переменные можно создавать, но один из принципов функционального программирования заключается в неизменности этих переменных. Если же необходимо изменить, тогда копируете переменную в другую в функции и возвращаете ее
Если брать React, то я бы сделал Общий SizeProvider где-то близко к корню компонент, и провайдил бы из него контекст, а те, кому интересно использовали useContex.
При этом я могу себе представить и 2 провайдера на разные части экрана. Или много (screen sharing / coworking).