【发布时间】:2020-01-16 13:54:17
【问题描述】:
我有一个来自滚动窗口对象的事件绑定。每次滚动时它都会被正确触发。直到现在一切正常。但是 setNavState 函数(这是我的 setState 函数)不会更新我的状态属性。
export default function TabBar() {
const [navState, setNavState] = React.useState(
{
showNavLogo: true,
lastScrollPos: 0
});
function handleScroll(e: any) {
const currScrollPos = e.path[1].scrollY;
const { lastScrollPos, showNavLogo } = navState;
console.log('currScrollPos: ', currScrollPos); // updates accordingly to the scroll pos
console.log('lastScrollPos: ', lastScrollPos); // last scroll keeps beeing 0
if (currScrollPos > lastScrollPos) {
setNavState({showNavLogo: false, lastScrollPos: currScrollPos});
} else {
setNavState({showNavLogo: true, lastScrollPos: currScrollPos});
}
}
useEffect(() => {
window.addEventListener('scroll', handleScroll.bind(this));
}, []);
...
}
所以我的问题是如何在此示例中相应地使用反应挂钩更新我的状态属性?
【问题讨论】:
-
我不明白你为什么使用 setNavState 而不是 setState
-
@Skyentao,他使用的是功能组件,而不是类组件。他不能在功能组件中使用 setState
标签: javascript reactjs react-hooks