この記事は、ランダムに発生するキーボードの問題を修正した後の感想を紹介します。興味のある方はぜひご覧ください。
私は最近、モバイル端末のバグを修正するのに 1 週間近くを費やしました。非常に大きな問題です。おそらく次のような問題です。比較的長い話ですが、興味があれば読み続けてください。
タブレットアプリケーションを長時間使用すると、バグが現れます まず、入力ボックスに内容を入力した後、[完了/検索]をクリックします。次に、ページ上の空白領域をクリックすると、ソフトキーボードがポップアップし、が最近入力された入力ボックスにカーソルのフォーカスが置かれます。 現時点では、ユーザーの行動に対するアプリケーションの反応は、ユーザーを混乱させ混乱させます。
要約すると、次のような特徴があります
ビジネスの背景については話さずに、アプリケーションのページ ロジックを簡単に紹介しましょう。
私たちのアプリケーションにはログイン後にホームページがあります。ホームページにはスライドまたはクリックして切り替えることができる3つのタブがあり、タブページには機能メニューの1つをクリックしてジャンプできます。入力ボックスのあるページに移動します。このページはおおよそ次のとおりです。プロの UX でない場合は、見苦しくても怒らないでください。
私たちが見つけたすぐに再現できるパスは次のとおりです
2 番目のステップは、最小シナリオで問題が発生する理由をコード部分から見つけ出すことです
私たちの間にはいくつかの推測があります
最終的に、すべてのネットワーク リクエストには、リクエスト結果が返される前に、ページ上にマスクのレイヤーと Web のスピナー (RN では ActiveIndicator) に似た読み込みプロンプト シンボルがあることがわかりました。この部分はページのレンダリングに影響します。 。
この部分が削除されると (リクエストが到着する前にマスキング レイヤーが表示されなくなります)、このバグは解消されます。理由の一部は見つかったようですが、まだ解明されていないため、この発見は当時まだ衝撃的で混乱をもたらしました。理由がわかりません。
3番目のステップは、(根本原因を明らかにせずに)修復を試みることです
古いマスクの実装では、ロード プロンプト シンボルを表示するためにルート レベルに兄弟要素を挿入するために、サードパーティの RN コンポーネント、react-native-root-siblings を使用しました。
通常、リクエストの送信後、リクエストの結果が到着する前に、新しい兄弟要素を挿入し、リクエストの完了後に削除します。当時、この部分がページの要素構造の変更を繰り返していたため、new-destroyロジックがnew-updateロジックに置き換えられ、要素の変更が減少したのではないかと疑われていました。アップデートする際、ActivityIndicatorが表示されないようにするだけで非表示になるようです。
ページ要素の削除と作成の繰り返しを減らすことで、このバグを修正したいと考えています。
それはとても不思議で再現するのが難しいのですが、理由はまだわかりません。
その後、QA は実際のデバイスで何度かこの問題が発生したと言いました。これでさらに困惑しましたが、実際に発生する可能性は低くなっているのに、なぜ依然として発生するのでしょうか。
現時点では、バグの本当の原因を理解する必要があります。
このバグのパフォーマンスに戻りましょう。なぜ空白領域をクリックすると TextInput の focus メソッドがトリガーされるのでしょうか?このようなことをいくつか試してみました。
TextInput のフォーカスがトリガーされる場所を確認します
コード ロジック内の少量のバインディング ref に加えて、.focus メソッドをトリガーします (少量しか発生しないため、バグを満たしておらず、バグが発生するとすべての入力がブロックされます) 影響を受けるシナリオ、迅速な排除は理由の一部ではありません)、RN が提供する TextInput コンポーネント内にもフォーカス メソッドが呼び出される場所が多数あることがわかりました。
以上がランダムに再発するキーボードの問題を修正した後の感想 (ReactNative)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。