Saya telah membangun komponen di Bereaksi yang seharusnya memperbarui gayanya sendiri pada jendela gulir untuk membuat efek paralaks.
render
Metode komponen terlihat seperti ini:
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>
);
}
Ini tidak berfungsi karena Bereaksi tidak tahu bahwa komponen telah berubah, dan karena itu komponen tidak dirender ulang.
Saya sudah mencoba menyimpan nilai itemTranslate
dalam keadaan komponen, dan memanggil setState
dalam panggilan balik gulir. Namun, ini membuat pengguliran tidak dapat digunakan karena ini sangat lambat.
Ada saran tentang cara melakukan ini?
render
dalam utas yang sama) hanya harus berkaitan dengan logika yang berkaitan dengan rendering / memperbarui DOM aktual dalam Bereaksi. Sebagai gantinya, seperti yang ditunjukkan oleh @AustinGreco di bawah ini, Anda harus menggunakan metode siklus hidup Bereaksi yang diberikan untuk membuat dan menghapus pengikatan acara Anda. Ini membuatnya mandiri di dalam komponen dan memastikan tidak ada kebocoran dengan memastikan acara mengikat dihapus jika / ketika komponen yang menggunakannya dilepas.