2017-11-21 74 views

Odpowiedz

5

Rozwiązano, przechodząc przez kod źródłowy PanResponder. PanResponder ustawia uchwyt interakcji za pośrednictwem InteractionManager. Możesz uzyskać dostęp do tego obsługiwać poprzez this.panResponder.getInteractionHandle() (nieudokumentowanych funkcji), a następnie usuń go za każdym razem przejść do lokalizacji w SectionList:

if (this.panResponder.getInteractionHandle()) { 
    InteractionManager.clearInteractionHandle(
     this.panResponder.getInteractionHandle() 
    ); 
} 

To przeniesie SectionList się w kolejce do wykonywania swoich obliczeń widoczność i tynków.

Proponuję, aby to zoptymalizować, usuwając uchwyt interakcji kilka razy, jak to możliwe, ponieważ InteractionManager jest używany ze względu na wydajność.

+0

Ładne rozwiązanie! W oczywisty sposób muszą to udokumentować. Cieszę się, że to rozwiązałeś :) – ShaneG

0

Dla sectionList zaktualizować dynamicznie trzeba umieścić dane używając jej do państwa. Ten przykład Expo (zrobione przez kogoś innego), jest dobrym przykładem:

https://snack.expo.io/Syy1bqKxW

Jego panResponder posiada wszystkie dane w państwie i na każdym „handlePanResponderMove” nazywa setstate() do aktualizowania położenia za każdym razem porusza się. Podsumowując, jeśli twoje dane nie są w stanie, nie zaktualizuje się ono dynamicznie. Umieszczenie danych w stanie React-Native polega na dynamicznym śledzeniu zmian danych.

Mam nadzieję, że to pomoże!

+1

Witam @Gersom. Byłbym wdzięczny za opinię na temat mojej odpowiedzi powyżej. Próbujesz zdobyć więcej punktów rep. Daj mi znać, jeśli masz pytania! :) – ShaneG

+0

SectionList powinien wiedzieć, że powinien się ponownie wydobyć, ponieważ wywoływana jest jego metoda scrollToLocation. Działa, gdy podnosisz palec ekranu i nie ma również zmiany stanu. Doceniam, że poświęciłeś czas na odpowiedź, ale szukam rozwiązania, które, mam nadzieję, działa bez sztuczki setState :) – Gersom

+0

@Gersom Bez problemu. Ale stan nie jest podstępem, ponieważ stanowi część struktury React-Native. https://facebook.github.io/react-native/docs/state.html - "W przypadku danych, które mają ulec zmianie, musimy użyć stanu.". Twoje dane są wczytywane podczas przewijania. Więc kiedy przesuniesz, twoje dane się zmieniają. Zgodnie z moim linkiem, musisz użyć stanu, aby to śledzić. – ShaneG

Powiązane problemy