Я создал компонент в React, который должен обновлять свой собственный стиль при прокрутке окна для создания эффекта параллакса.
Компонентный render
метод выглядит так:
function() {
let style = { transform: 'translateY(0px)' };
window.addEventListener('scroll', (event) => {
let scrollTop = event.srcElement.body.scrollTop,
itemTranslate = Math.min(0, scrollTop/3 - 60);
style.transform = 'translateY(' + itemTranslate + 'px)');
});
return (
<div style={style}></div>
);
}
Это не работает, потому что React не знает, что компонент был изменен, и поэтому компонент не визуализируется повторно.
Я попытался сохранить значение itemTranslate
в состоянии компонента и вызвать setState
обратный вызов прокрутки. Однако это делает прокрутку непригодной, так как она очень медленная.
Есть предложения, как это сделать?
render
в том же потоке) должны быть связаны только с логикой, относящейся к рендерингу / обновлению фактического DOM в React. Вместо этого, как показано ниже @AustinGreco, вы должны использовать указанные методы жизненного цикла React для создания и удаления привязки событий. Это делает его автономным внутри компонента и гарантирует отсутствие утечек, гарантируя, что привязка события удалена, если / когда компонент, который его использует, размонтирован.