Tôi đã xây dựng một thành phần trong React, được cho là cập nhật kiểu riêng của nó trên cuộn cửa sổ để tạo hiệu ứng thị sai.
render
Phương thức thành phần trông như thế này:
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>
);
}
Điều này không hoạt động vì React không biết rằng thành phần đã thay đổi và do đó thành phần này không được đăng ký lại.
Tôi đã thử lưu trữ giá trị itemTranslate
ở trạng thái của thành phần và gọisetState
trong cuộc gọi lại cuộn. Tuy nhiên, điều này làm cho việc cuộn không thể sử dụng được vì điều này rất chậm.
Bất kỳ đề nghị về cách làm điều này?
render
trong cùng một luồng) chỉ nên liên quan đến logic liên quan đến kết xuất / cập nhật DOM thực tế trong React. Thay vào đó, như được hiển thị bởi @AustinGreco bên dưới, bạn nên sử dụng các phương thức vòng đời React đã cho để tạo và xóa liên kết sự kiện của bạn. Điều này làm cho nó tự chứa bên trong thành phần và đảm bảo không bị rò rỉ bằng cách đảm bảo ràng buộc sự kiện được loại bỏ nếu / khi thành phần sử dụng nó không được đếm.