Есть ли способ прокрутки до вершины ScrollView
в ответ на нажатие кнопки?
Я могу заставить rec render
всей страницы, но это кажется очень неэффективным.
Есть ли способ прокрутки до вершины ScrollView
в ответ на нажатие кнопки?
Я могу заставить rec render
всей страницы, но это кажется очень неэффективным.
Вы можете запустить метод scrollTo ScrollView. Проверьте источник.
Вы можете получить ссылку на компонент ScrollView, установив свойство ref и используя this.refs, как описано здесь: https://facebook.github.io/react/docs/more-about-refs.html
ref
к вашему компоненту ScrollView
. Пример: <ScrollView ref='_scrollView'>
onPress={() => { this.refs._scrollView.scrollTo(0); }}
Простой пример:
<ListView
ref={ref => this.listView = ref}
onContentSizeChange={() => {
this.listView.scrollTo({y: 0})
}}
/>
scrollTo(x,y)
теперь устарел. Теперь лучше всего передать объект для прокрутки. Вот так:
this.refs.scrollView.scrollTo({x: 0, y: 0, animated: true})
Просто к делу. Вопрос был для scrollView, и у меня это работало нормально:
<ScrollView
ref='_scrollView'
onContentSizeChange={() => { this.refs._scrollView.scrollTo({x: 0, y: 0, animated: true}); }}
>
& Lt; ScrollView ref = {(ref) => {this.scrollListReftop = ref; }}>
& Lt;/ScrollView>
//напишите это, чтобы получить прокрутку сверху
this.scrollListReftop.scrollTo({x: 0, y: 0, animated: true})
Возможна кнопка для управления scrollveiw или списком сверху.
во-первых, вы можете использовать в нем событие onScroll
метода put для обнаружения event.nativeEvent.contentOffset.y
ListView или scrollView, вы можете установить состояние для управления им s show or hide according to the
y`.
Затем установите кнопку на своей странице, используйте метод onPress
и .scrollTo
, чтобы сделать это.
Вот реализация может использоваться как ссылка: https://www.npmjs.com/package/react-native-scrolltotop
Надеясь, что это поможет
Немного сложный, но может быть полезен для всех, кто использует функциональные компоненты вместо классов.
ImperativeScrollView.tsx:
import React, {
useRef,
useImperativeHandle,
forwardRef,
RefForwardingComponent,
PropsWithChildren,
} from "react";
import { ScrollView, ScrollViewProps } from "react-native";
export interface ImperativeScrollViewHandles {
scrollToStart(options?: { animated: boolean }): void;
scrollToEnd(options?: { animated: boolean }): void;
scrollTo(options: { x?: number; y?: number; animated?: boolean }): void;
}
const ImperativeScrollView: RefForwardingComponent<
ImperativeScrollViewHandles,
PropsWithChildren<ScrollViewProps>
> = (props, ref) => {
const scrollViewRef = useRef<ScrollView>(null);
useImperativeHandle(ref, () => ({
scrollToStart: options => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollTo({
x: 0,
y: 0,
animated: options ? options.animated : true,
});
}
},
scrollToEnd: options => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollToEnd(options);
}
},
scrollTo: options => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollTo(options);
}
},
}));
return <ScrollView ref={scrollViewRef} {...props} />;
};
export default forwardRef(ImperativeScrollView);
Использование:
const MyComponent: React.FC<MyComponentProps> = props => {
const scrollViewRef = useRef<ImperativeScrollViewHandles>(null);
return (
<ImperativeScrollView ref={scrollViewRef}>
<Button
title={"Tap me!"}
onPress={() => {
if (scrollViewRef.current) {
scrollViewRef.current.scrollToStart();
}
}}
/>
</ImperativeScrollView>
);
};