Reagieren Nativen Verhindern, Dass Double Tap
Ich habe eine TouchableHighlight
Verpackung einer Text
block, dass, wenn geklickt wird, öffnet sich eine neue Szene (die ich verwende reagieren-native-router-flux).
Alles funktioniert gut, außer für die Tatsache, dass, wenn Sie schnell Tippen Sie auf die TouchableHighlight
kann die Szene zweimal Rendern.
Ich möchte verhindern, dass die Benutzer schnell in der Lage, Tippen Sie die Schaltfläche an.
Was ist der beste Weg, dies zu erreichen in Native? Ich sah in der Geste-Responder-System, aber es gibt keine Beispiele, oder etwas von der Sorte, die wenn du neu bist, wie ich, ist verwirrend.
- Hast du eine Lösung finden?
- hat eine von diesen Antworten, die Arbeit für Ihren Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie zu tun versuchen ist, die Sie möchten zu beschränken, die auf Tippen Sie auf Rückrufe, so dass Sie nur EINMAL ausgeführt.
Dies wird als Drosselung, und Sie können
underscore
für die:Hier ist, wie:
Hier ist, wie meine reagieren Komponente Aussehen nachdem alle.
Ich hoffe das hilft dir.
Im Falle dass Sie wollen lernen mehr überprüfen dieser thread.
onPress={()=>this.onPressThrottledCb(data)}
this.onPressThrottledCb.bind(this)
stattthis.onPressThrottledCb
noch notwendig, wenn die Methode definiert ist als Eigenschaft einer Klasse? alsoonPressThrottledCb = () => {...}
Folgende Werke durch die Verhinderung von routing auf dem gleichen Weg zweimal:
Vielleicht könnten Sie die neue disable-feature eingeführt, für berührbare Elemente 0.22? Ich denke, so etwas wie dieses:
Komponente
Methode
Ich noch nicht selber ausprobiert. Also ich bin mir nicht sicher, ob es funktioniert.
Ich es so machen:
Könnten Sie bounce den klicken Sie an den eigentlichen Empfänger Methoden, insbesondere im Umgang mit dem Staat für visuelle Effekte.
Wenn Sie
react-navigation
Sie können einekey
Eigenschaftnavigate
um sicherzustellen, dass nur eine Instanz je dem Stapel Hinzugefügt.über https://github.com/react-navigation/react-navigation/issues/271
Ich den Fehler behoben, indem erstellen ein Modul, welches eine Funktion aufruft, die nur einmal in das übergebene Intervall.
Beispiel: Wenn Sie navigieren möchten, von zu Hause aus -> Über Und Sie drücken die Schaltfläche Über zweimal sagen 400 ms.
Hier ist der link zu der NPM-Modul: https://www.npmjs.com/package/call-once-in-interval
Nachdem ich mehrere github-threads, ALSO die Artikel und versuchen, die meisten Lösungen, die ich selbst gekommen, zu den folgenden Schlussfolgerungen:
Bereitstellung einer zusätzlichen
key
parameter zu tun "idempotent schiebt" nicht konsistent funktioniert jetzt.https://github.com/react-navigation/rfcs/issues/16
Mit
debounce
verlangsamt die UX deutlich. Die navigation geschieht nur X ms, nachdem der Benutzer den Knopf gedrückt der letzten Zeit. X muss groß genug sein, um die Zeit zu überbrücken, wo die double taps passieren könnte. Das könnte alles sein, von 100-600ms wirklich.Mit
_.throttle
funktionierte nicht für mich. Es rettete die gedrosselt Funktionsaufruf ausgeführt, nachdem der timer lief, resultierend in einer verzögerten double tap.Ich überlegt auf
react-native-navigation
aber anscheinend das Problem liegt tiefer und Sie erleben es auch.So jetzt baute ich meinen eigenen hack mischt sich mit meinem code die wenigsten:
überall, wo wir navigieren statt
tun
Schön.
Können Sie tun, mit debounce sehr einfache Weise