React'te, bir paralaks efekti oluşturmak için pencere kaydırmasında kendi stilini güncellemesi gereken bir bileşen oluşturdum.
Bileşen render
yöntemi şuna benzer:
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>
);
}
Bu işe yaramaz çünkü React bileşenin değiştiğini bilmiyor ve bu nedenle bileşen yeniden oluşturulmuyor.
Değerini itemTranslate
bileşenin durumunda depolamayı setState
ve kaydırma geri aramasında çağırmayı denedim . Ancak bu, son derece yavaş olduğu için kaydırmayı kullanılamaz hale getirir.
Bunun nasıl yapılacağına dair herhangi bir öneriniz var mı?
render
aynı iş parçacığı içinde çağırdığınız diğer tüm özel yöntemler ) yalnızca React'te gerçek DOM'un oluşturulması / güncellenmesiyle ilgili mantıkla ilgilenmelidir. Bunun yerine, aşağıda @AustinGreco tarafından gösterildiği gibi, olay bağlamanızı oluşturmak ve kaldırmak için verilen React yaşam döngüsü yöntemlerini kullanmalısınız. Bu, bileşenin içinde bağımsız olmasını sağlar ve onu kullanan bileşen çıkarıldığında / olduğunda olay bağlamasının kaldırıldığından emin olarak sızıntı olmamasını sağlar.