【发布时间】:2020-03-05 08:26:29
【问题描述】:
状态确实在滚动上设置,但从事件监听器记录,它似乎停留在初始值。
我想这与定义副作用时设置 scrolling 有关,但我怎么能从滚动触发状态更改?我认为的任何窗口事件也是如此。
这是一个代码框示例:https://codesandbox.io/s/react-test-zft3e
const [scrolling, setScrolling] = useState(false);
useEffect(() => {
window.addEventListener("scroll", () => {
console.log(scrolling);
if (scrolling === false) setScrolling(true);
});
}, []);
return (
<>
scrolling: {scrolling}
</>
);
【问题讨论】:
-
有什么问题?它按预期工作
-
如果你开始滚动,你的状态就改变了
-
尝试将你的函数移到外面:
const handleScroll = useCallback(e => { console.log(`scrolling:${scrolling}`); if (scrolling === "no") setScrolling("yes!"); }, []);
标签: javascript reactjs react-hooks