Cet article partage avec vous mes réflexions sur la résolution d'un problème de clavier récurrent de manière aléatoire. Il est très significatif. Les amis intéressés peuvent y jeter un œil
Il a fallu près d'une semaine pour le résoudre récemment. J'ai trouvé un bug sur le terminal mobile. C'est un bug très intéressant, quelque chose comme ça. C'est une histoire relativement longue, si vous êtes intéressé, vous pouvez continuer à lire.
zones vides<.> sur la page, le clavier contextuel apparaîtra et le curseur se concentre sur La zone de saisie la plus récemment saisie. À l'heure actuelle, la réponse de l'application au comportement des utilisateurs rendra les utilisateurs confus et confus. En résumé, il présente les caractéristiques suivantesL'application est normale au début, mais elle ne peut pas être reproduite à chaque fois
Un chemin que nous avons trouvé et qui peut être reproduit rapidement est
Après vous être connecté à la page d'accueil, changez trois fois à plusieurs reprises, tabulez plusieurs fois (plus de 20 fois)
Si cette partie est supprimée (le masque n'apparaîtra pas avant l'arrivée de la demande), le bug disparaîtra. Cette découverte était encore choquante et déroutante à l'époque, car il semble qu'une partie de la raison ait été trouvée mais nous avons quand même. Je n'ai pas compris pourquoi.
Avec cette idée en tête, nous essayons de le réparer. Selon les besoins de l'entreprise, nous ne pouvons pas annuler l'utilisation d'ActivityIndicator, car il est vraiment nécessaire de donner aux utilisateurs des invites appropriées.
Nous avons essayé de modifier l'implémentation de mask. Dans l'ancien, nous avons utilisé un composant RN tiers react-native-root-siblings pour nous aider à insérer un élément frère au niveau racine pour afficher notre chargement. symbole d'invite.
Généralement, après l'envoi de la requête mais avant que le résultat de la requête n'arrive, nous insérons un nouvel élément frère et le supprimons une fois la requête terminée. À cette époque, on soupçonnait que, parce que cette partie modifiait à plusieurs reprises la structure des éléments de la page, la logique de nouvelle destruction était remplacée par une logique de nouvelle mise à jour, ce qui réduisait la modification des éléments. Lors de la mise à jour, le simple fait d'essayer d'empêcher l'apparition de l'ActivityIndicator semble être masqué.
Nous espérons corriger ce bug en réduisant les suppressions et créations répétées d'éléments de page. Quel est le résultat ?
C’est tellement magique que c’est difficile à reproduire. Nous sommes très heureux, même si nous n’en comprenons toujours pas la raison.
Plus tard, QA a déclaré qu'il l'avait rencontré à plusieurs reprises sur des appareils réels, ce qui nous a rendu encore plus perplexes, c'est que la probabilité d'apparition a effectivement diminué, mais pourquoi apparaît-elle encore ?
À ce stade, nous devons comprendre la véritable cause du bug.
Revenons sur les performances de ce bug. Pourquoi cliquer sur une zone vide déclenche-t-il la méthode focus de TextInput ? Nous avons essayé quelques choses comme celle-ci.
Découvrez où le focus de TextInput sera déclenché
En plus d'une petite quantité de référence de liaison dans la logique du code, puis du déclenchement la méthode .focus (Comme elle n'apparaît qu'en petit nombre, elle ne répond pas à notre scénario selon lequel toutes les entrées seraient affectées lorsque ce bug apparaît. L'élimination rapide n'est pas en partie la raison.) Nous avons constaté qu'il existe également de nombreux endroits dans TextInput composant fourni par RN où la méthode focus est appelée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!