Это один из первых случаев, когда я на самом деле правильно использую React Hooks в проекте, так что терпите меня, если меня там нет.
В нижеприведенном компоненте моей целью является отображение <HelperTooltip>
при загрузке, и когда прокручиваемый div (не окно) прокручивается, я хочу скрыть его после прокрутки X количества пикселей.
Мой мыслительный процесс заключается в создании объекта useRef на элементе прокрутки <div/>
, который затем я могу добавить прослушивание события с помощью функции обратного вызова, которая затем может переключать состояние, чтобы скрыть <HelperTooltip>
Я создал кодовую коробку ниже, чтобы попытаться продемонстрировать, что я пытаюсь сделать. Как вы можете видеть в демоверсии, node.addEventListener('click')
работает нормально, однако, когда я пытаюсь вызвать node.addEventListener('scroll')
, это не стрельба.
Я не уверен, что выбрал неправильный подход или нет, любая помощь будет принята с благодарностью. В демонстрации кодов и ящиков это изображение реакции, которое я пытаюсь скрыть при прокрутке, а не <HelperTooltip>
Ссылка CodeSandbox: https://codesandbox.io/s/zxj322ln24
import React, { useRef, useCallback, useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const App = props => {
const [isLogoActive, toggleLogo] = useState(true);
const scrollElementRef = useCallback(node => {
node.addEventListener("click", event => {
console.log("clicked", event);
});
/*
I want to add the scroll event listener
here and the set the state isLogoActive to
false like the event listener above but the 'scroll' event
is firing --- see below on line 21
*/
// node.addEventListener("scroll", event => {
// console.log("scrolled", event);
// toggle log
// });
});
return (
<div className="scrolling-container">
<div ref={scrollElementRef} className="scrolling-element">
<p>top</p>
{isLogoActive && (
<div className="element-to-hide-after-scroll">
<img
style={{ width: "100px", height: "100px" }}
src="https://arcweb.co/wp-content/uploads/2016/10/react-logo-1000-transparent-768x768.png"
/>
</div>
)}
<p>bottom</p>
</div>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("app"));