React Native 使用 useEffect 钩子移除 scrollY 监听器
React native remove scrollY listener with useEffect hook
const [scrollY] = useState(new Animated.Value(0));
const [scrollYValue, setScrollYValue] = useState(0);
useEffect(() => {
scrollY.addListener(({ value }) => {
setScrollYValue(value);
});
return scrollY.removeAllListeners();
}, [scrollY, scrollYValue, setScrollYValue]);
目标是实例化一个名为 scrollY
的 Animated.Value 并添加一个将当前滚动值设置为状态的侦听器。此滚动值 scrollYValue
在组件之间共享,因此它们可以根据用户滚动的距离做任何他们需要做的事情。
如果我删除 return scrollY.removeAllListeners();
行,一切正常,但我确实想在卸载此组件时删除侦听器。
这是我的 useEffect
依赖数组不正确的情况吗?它似乎立即删除了侦听器并且 scrollY 只是固定在 0
.
更新:useEffect
中的 return 值应该是一个函数:
useEffect(() => {
scrollY.addListener(({ value }) => {
setScrollYValue(value);
});
return () => scrollY.removeAllListeners();
}, [scrollY, scrollYValue, setScrollYValue]);
const [scrollY] = useState(new Animated.Value(0));
const [scrollYValue, setScrollYValue] = useState(0);
useEffect(() => {
scrollY.addListener(({ value }) => {
setScrollYValue(value);
});
return scrollY.removeAllListeners();
}, [scrollY, scrollYValue, setScrollYValue]);
目标是实例化一个名为 scrollY
的 Animated.Value 并添加一个将当前滚动值设置为状态的侦听器。此滚动值 scrollYValue
在组件之间共享,因此它们可以根据用户滚动的距离做任何他们需要做的事情。
如果我删除 return scrollY.removeAllListeners();
行,一切正常,但我确实想在卸载此组件时删除侦听器。
这是我的 useEffect
依赖数组不正确的情况吗?它似乎立即删除了侦听器并且 scrollY 只是固定在 0
.
更新:useEffect
中的 return 值应该是一个函数:
useEffect(() => {
scrollY.addListener(({ value }) => {
setScrollYValue(value);
});
return () => scrollY.removeAllListeners();
}, [scrollY, scrollYValue, setScrollYValue]);