2017-02-05 18 views
11

Podczas korzystania z Animated.createAnimatedComponent(ScrollView) do tworzenia animowanych ScrollView nie jest już możliwe używanie scrollTo.scrollTo jest niezdefiniowany w animowanym ScrollView

const AnimatedScrollView = Animated.createAnimatedComponent(ScrollView); 

<AnimatedScrollView ref={(ref) => this.list = ref}> 
    <View style={{height: 1000}} /> 
</AnimatedScrollView> 

Wywołanie this.list.scrollTo({x: 0, y: 0}) daje następujący błąd:

_this.list.scrollTo is not a function

to działa dobrze na normalnej Scrollview. Czy istnieje sposób na rozwiązanie tego problemu?

Odpowiedz

2

@ max23_ 's odpowiedź może działać, ale nie jest to właściwy sposób - z reguły nie powinniśmy nigdy uzyskać dostęp do prywatnych zmiennych bezpośrednio, ponieważ często są one przedmiotem zmian. (Edit: brak szacunku :-))

Ze względu na this pull request, nowy i przyszłościowy sposób na uzyskanie zawinięty komponentu ref jest użycie metody getNode() użytkową, jak dostęp do zmiennych prywatnych (poprzedzany z _) nie jest bezpieczny z przyszłych zmian API.

więc nowy sposób robi to

ref={c => (this.myRef = c)}

a następnie, gdy wywołanie metody, robi

this.myRef.getNode().scrollToOffset({ y: 0, animated: true, });

:-)

+0

Ładne znalezienie na 'getNode()'. Myślę, że można go przepisać na 'ref = {c => this.myRef = c.getNode()}, więc nie musiałbyś zawsze wywoływać' getNode() '. –

+0

Próbowałem tego, ale dostałem niezdefiniowany błąd - nie miałem czasu na jego debugowanie, ale możesz edytować odpowiedź, jeśli potrafisz sprawić, żeby działało :-) – jhm

+0

Korzystanie z animowanego przewijania Zaskoczyło mnie próbowanie zorientuj się, dzięki za informacje. Jedynym zastrzeżeniem jest to, że 'ref = {ref => this.scrollView = ref.getNode()}' nie działa dla mnie, ale 'this.scrollView.getNode(). ScrollTo()' działa poprawnie. – Nathan

18

Spróbuj uzyskać ref z powrotów składnik z Animated.createAnimatedComponent metody:

ref={(ref) => this.list = ref._component} 

Następnie, nazywając this.list.scrollTo({x: 0, y: 0}) powinno działać.

+0

That Got to działa, bardzo dziękuję :) – David

+1

Kiedykolwiek używam tego rozwiązania, zawsze otrzymuję błąd podczas próby użycia this.setState. Obejrzałem go, ustawiając ref takie jak to: 'ref = 'scrollRef'', a następnie używając funkcji scrollTo, nazywając to:' this.refs.scrollRef._component.scrollTo' – Danny

+0

Mam ten sam problem, użyłem flatList, dla moja ścieżka wygląda jak ref.component._listRef._scrollRef –