2015-12-09 14 views
7

Piszę aplikację czasomierza za pomocą reakcji natywnej na androida w clojurescript (używając odczynnika, mam nadzieję, że nie jest to ważne).React Native. Jak mogę skupić się na wprowadzaniu tekstu, gdy strona ponownie renderuje się na tykanie zegara

Mam TextInput gdzie akceptuję tekst od użytkownika, aby nazwać liczniki. Za każdym razem, gdy mój zegar odlicza, cała aplikacja na Androida ponownie się wyświetla i tracę koncentrację na TextInput. Obecnie używam onChangeText, aby zapisać znaki, które piszę, czy istnieje sposób na skupienie się na wprowadzaniu tekstu, gdy zegar tyka?

Dzięki.

+1

Czy wypróbowałeś 'View.requestFocus();'? I nie rozumiem, dlaczego "ponowne renderowanie aplikacji" na każdym tiku. –

Odpowiedz

6

Najprostszym rozwiązaniem jest zadzwonić pod numer this.refs.yourTextInput.focus() w metodzie componentDidUpdate. Jednak najprawdopodobniej spowoduje to zanikanie klawiatury i ponowne ożywienie.

Źródłem problemu jest to, że wartość licznika czasu i dane wejściowe w polu TextInput mają ten sam zakres, więc po zaktualizowaniu stanu zarówno licznik czasu, jak i wartość TextInput są ponownie renderowane za pomocą funkcji render. W idealnej sytuacji można:

Umieść tekst licznika w komponencie niestandardowym i dodaj metodę dla tego niestandardowego komponentu, aby ustawić własny stan. Spowoduje to ponowne renderowanie komponentu niestandardowego, o ile aktualizuje się stan komponentu użytkownika.

+0

To może zadziałać (i prawdopodobnie zaakceptuję to dla nagrody), ale wymaga pewnych zmian stanu bez drzewa stanu, więc nie jest to czysto funkcjonalne. Zastanawiam się, czy istnieje rozwiązanie, które będzie zgodne z https://github.com/staltz/flux-challenge. Przypuszczam, że systemy reagowania i flux podobne mają problemy z wprowadzaniem użytkownika + asynchronicznymi aktualizacjami. – GTDev

Powiązane problemy