scrollTopTop 侦听器在组件中不起作用(React-Native)
scrollTopTop listener not working in component (React-Native)
我以前在 ScrollView 中有相同的实现并且它正在工作,当我更改为 flatlist 时我的滚动到顶部停止工作
我正在使用事件寄存器,因为我有嵌套导航。
这是我的实现:
(在 Navigation.js)
<Tab.Screen
name="Home"
component={HomeNavigation}
listeners={({navigation, route}) => ({
tabPress: () => {
const isAtFirstScreenOfStack =
!route.state || route.state?.index === 0;
if (navigation.isFocused() && isAtFirstScreenOfStack) {
console.log('Scrolling to Top');
EventRegister.emit('scrollToTop', 'it works!!!');
}
},
})}
在我有列表的组件中:
let scrollViewRef = useRef(null);
let scrollToTopListener = useRef(null);
useFocusEffect(
useCallback(() => {
scrollToTopListener.current = EventRegister.addEventListener(
'scrollToTop',
() => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollTo({y: 0, animated: true});
}
},
);
return () => {
EventRegister.removeEventListener(scrollToTopListener.current);
};
}, []),
);
...
<FlatList
ref={(ref) => (scrollViewRef = ref)}
...
在FlatList中使用scrollToOffset
ref.current.scrollToOffset({y:0,animated:true})
我以前在 ScrollView 中有相同的实现并且它正在工作,当我更改为 flatlist 时我的滚动到顶部停止工作
我正在使用事件寄存器,因为我有嵌套导航。
这是我的实现: (在 Navigation.js)
<Tab.Screen
name="Home"
component={HomeNavigation}
listeners={({navigation, route}) => ({
tabPress: () => {
const isAtFirstScreenOfStack =
!route.state || route.state?.index === 0;
if (navigation.isFocused() && isAtFirstScreenOfStack) {
console.log('Scrolling to Top');
EventRegister.emit('scrollToTop', 'it works!!!');
}
},
})}
在我有列表的组件中:
let scrollViewRef = useRef(null);
let scrollToTopListener = useRef(null);
useFocusEffect(
useCallback(() => {
scrollToTopListener.current = EventRegister.addEventListener(
'scrollToTop',
() => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollTo({y: 0, animated: true});
}
},
);
return () => {
EventRegister.removeEventListener(scrollToTopListener.current);
};
}, []),
);
...
<FlatList
ref={(ref) => (scrollViewRef = ref)}
...
在FlatList中使用scrollToOffset
ref.current.scrollToOffset({y:0,animated:true})