В основном получается, что ваш useEffect
работает только два раза при монтировании и при размонтировании (, и это явно преднамеренно ), однако нежелательным побочным эффектом этого является то, что значение isHidden
, котороевы проверяете, что метод onScroll
закрывается по его начальному значению (которое false
) - навсегда ( до тех пор, пока не отключится ).
Вы можете использовать функциональныйформа сеттера, где он получает действительное значение состояния и помещает в него всю логику ветвления.Что-то вроде:
setIsHidden(isHidden => { // <- this will be the proper one
const scrolledDown = window.scrollY > prevScrollY.current!;
console.log(`is hidden ${isHidden}`);
if (scrolledDown && !isHidden) {
console.log(`set hidden true`);
return true;
} else if (!scrolledDown && isHidden) {
console.log(`set hidden false. THIS NEVER HAPPENS`);
return false;
} else {
// ...