我正在尝试遵循react-plugin-react-hooks。
我有一个useEffect
,它向window
(onScroll
)添加了一个事件侦听器。 onScroll
使用了window.pageYOffset
。
function onScroll() {
if (window.pageYOffset > 0) {
setfoor(bar)
} else {
setfoor(baz)
}
}
现在在useEffect
中,我有:
useEffect(() => {
window.addEventListener('scroll',onScroll);
onScroll();
return () => {
window.removeEventListener('scroll',onScroll);
};
},[]);
这遵循最初支持的建议,即如果您传递一个空的依赖项数组,则类似于componentDidmount
。但是React文档明确指出,您应该不传递任何依赖项(甚至不传递空数组),或者传递所有依赖项(指的是props或state)。 (https://reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies)如下所示:
useEffect(() => {
window.addEventListener('scroll',[onsScroll]);
但这意味着我必须对useCallback
使用onScroll
,否则它将始终具有不同的依赖关系。但是useCallback
的{{1}}“依赖关系”将是onScroll
,但这是行不通的,即:
window.pageYOffset
我的一般问题是,如何处理具有外部依赖项的function onScroll = React.useCallback(() => {
if (window.pageYOffset > 0) {
setfoor(bar)
} else {
setfoor(baz)
}
},[window.pageYOffset])
/ useEffect
函数? (除了忽略警告。)
谢谢
我还尝试将useCallback
的定义完全移到onScroll
内,但是没有正确更新。
useEffect