Dieser Artikel teilt Ihnen einen Gedanken mit, nachdem ein zufällig wiederkehrendes Tastaturproblem behoben wurde. Es ist sehr sinnvoll, dass Freunde, die interessiert sind, einen Blick darauf werfen
Es hat vor kurzem fast eine Woche gedauert. Ich habe einen Fehler auf dem mobilen Endgerät gefunden. Es ist ein sehr interessanter Fehler, so etwas wie dieser. Dies ist eine relativ lange Geschichte. Wenn Sie interessiert sind, können Sie weiterlesen.
Der Fehler tritt auf, nachdem eine Tablet-Anwendung längere Zeit verwendet wurde. Klicken Sie zunächst auf „Fertig/Suchen“, nachdem Sie einige Inhalte in das Eingabefeld eingegeben haben. Klicken Sie anschließend auf einige leere Bereiche. und der Cursorfokus liegt auf Das zuletzt eingegebene Eingabefeld. Zu diesem Zeitpunkt wird die Reaktion der Anwendung auf das Benutzerverhalten die Benutzer verwirren und verwirren.
Zusammenfassend weist es folgende Eigenschaften aufDer erste Schritt besteht darin, zu versuchen, ihn wieder zu stabilisieren
Ein Pfad, den wir gefunden haben und der schnell reproduziert werden kann, ist
Nachdem Sie sich auf der Startseite angemeldet haben, wechseln Sie drei Mal wiederholt Tab mehrmals (mehr als 20 Mal)
Der zweite Schritt besteht darin, aus dem Codeteil herauszufinden, warum das Problem im Minimalszenario auftritt
Es gibt ein paar Vermutungen unter uns
Es gibt ein Problem mit der von uns gekapselten Eingabekomponente
Wir haben schließlich festgestellt, dass alle unsere Netzwerkanfragen eine Maskenebene und ein Ladeaufforderungssymbol ähnlich dem Spinner im Web (ActivityIndicator in RN) auf der Seite haben, bevor das Anfrageergebnis zurückgegeben wird. Dieser Teil wird beeinflusst Seitenrendering.
Wenn dieser Teil entfernt wird (die Maske wird nicht angezeigt, bevor die Anfrage eintrifft), verschwindet der Fehler. Diese Entdeckung war damals noch schockierend und verwirrend, da es den Anschein hat, dass ein Teil der Ursache gefunden wurde, wir aber immer noch Ich habe es nicht herausgefunden.
Wir haben versucht, die Implementierung von mask zu ändern. In der alten Version haben wir die RN-Komponente „react-native-root-siblings“ eines Drittanbieters verwendet, um ein Geschwisterelement auf der Stammebene einzufügen, um unsere Ladung anzuzeigen Eingabeaufforderung.
Im Allgemeinen fügen wir nach dem Senden der Anfrage, aber bevor das Ergebnis der Anfrage eintrifft, ein neues Geschwisterelement ein und löschen es, nachdem die Anfrage abgeschlossen ist. Zu diesem Zeitpunkt wurde vermutet, dass aufgrund der wiederholten Änderung der Elementstruktur der Seite durch diesen Teil die Neu-Zerstörungslogik durch die Neu-Aktualisierungslogik ersetzt wurde, wodurch die Änderung von Elementen reduziert wurde. Beim Aktualisieren scheint nur der Versuch zu verhindern, dass der ActivityIndicator angezeigt wird, ausgeblendet zu sein.
Wir hoffen, diesen Fehler zu beheben, indem wir das wiederholte Löschen und Erstellen von Seitenelementen reduzieren. Was ist das Ergebnis?
Es ist so magisch, dass es schwierig ist, es zu reproduzieren. Wir sind sehr glücklich, obwohl wir den Grund immer noch nicht verstehen.
Später sagte die Qualitätssicherung, dass es mehrmals auf echten Geräten aufgetreten sei, was uns noch mehr verwirrte. Das Rätselhafte daran ist, dass die Wahrscheinlichkeit des Auftretens tatsächlich geringer geworden ist, aber warum es immer noch auftritt.
Zu diesem Zeitpunkt müssen wir die wahre Ursache des Fehlers verstehen.
Kehren wir zur Leistung dieses Fehlers zurück. Warum löst das Klicken auf einen leeren Bereich die Fokusmethode von TextInput aus? Wir haben ein paar solcher Dinge ausprobiert.
Finden Sie heraus, wo der Fokus von TextInput ausgelöst wird
Zusätzlich zu einer kleinen Menge an Bindungsreferenzen in der Codelogik und dem anschließenden Auslösen die .focus-Methode (Da sie nur in geringer Anzahl vorkommt, erfüllt sie nicht unser Szenario, dass alle Eingaben betroffen sind, wenn dieser Fehler auftritt. Eine schnelle Beseitigung ist nicht Teil der Ursache.) Wir haben festgestellt, dass es auch viele Stellen im TextInput gibt Von RN bereitgestellte Komponente, in der die Fokusmethode aufgerufen wird.
Das obige ist der detaillierte Inhalt vonGedanken nach der Behebung eines zufällig wiederkehrenden Tastaturproblems (ReactNative). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!