私の理解では、FlatViewManagerはFlatViewGroupという単一のビューとしてすべての子とフラットをフラットにします。しかし、私は、RCTTextManagerがそのシャドウ・ノードとしてRCTTextを返し、RCTTextが仮想ノードではないことを発見しました。 RCTTextManagerは、そのviewInstanceとしてFlatViewGroupを返しますか? FlatViewGroupにはビュー階層がありますか?私はの意味が何であるか分かりませんです。ネイティブのアンドロイドに反応するFlatViewManagerの目的は何ですか?
答えて
あなたの理解は間違いありませんが、欠落しているものがあります。
FlatViewGroupは単独で何も実行したり描画したりしません。すべてのビューは実際にはFlatViewGroup(テキスト、イメージ、ビュー - すべてがFlatViewGroupにマップされています)であることがわかります。
しかし、一般的なFlatViewGroupは、画像、テキスト、枠線などをどのように描画できますか?何か、それについては分かりません。
View、Image、Textはバックグラウンドスレッドでコンテンツを準備し、最適化し、可能な限り小さなリソース(Androidビュー)を使用しようとします。多くの場合、単一のFlatViewGroupに数百の要素を収めることができます。
しかし、いくつかのケースでは、より多くのビューが優れています。たとえば、要素が多数変更されている場合、その要素が独自のビューに移動され、その要素が変更されたときにその要素のみを再描画できるようにするのが最適です。
すべてのFlatShadowNodeに、要素を親にフラット化できるかどうかを制御するmMountsToViewを呼び出すフラグがあります。
したがって、FlatShadowNodeのmMountsToViewフラグがtrueに設定されている場合、どのViewを使用する必要がありますか?これは、ViewManager.createViewInstance()が起動する場所です。
ここで質問に答えることができます。はい、RCTViewManagerは、RCTTextの場合はFlatViewGroupを返しますが、の場合はすべて RCTTextでは返しません。ほとんどのテキストはmMountsToViewをfalseに設定し、親にフラット化されます。
あなたが混乱しているのは、仮想ノードとビューのマウントです。
仮想ノードはフレックスボックスのことであり、ノードが独立したものではなく、測定できないことを意味します。これには、親以外のノードと常にマージされるという副作用があります。これは、フラット実装に関係なく行われます。
フラットUIマネージャは、ノードの平坦化をまったく新しいレベルに引き上げます。ノードがさらに平坦化されるかどうかを制御するこのmMountsToViewフラグを追加します。ノードが多量に突然変異して、兄弟が何の理由もなく再描画された場合はtrueに設定します。
もう少し理解しやすくするために、RCTTextを最適化したいと考えてください。 FlatViewGroupにマウントされることがあることに気が付きましたが、子を含むことはできないため、ViewGroupである必要はありません。 FlatView(またはFlatTextViewのようなもっと特殊化されたもの)を追加し、FlatViewGroupの内容をその中にコピーし、すべての子管理ロジックを削除し、RCTTextManagerを変更してビューを返すことができます。 Reactを再実行すると、いくつかのテキストが新しいビューを使用していますが、mMountsToViewフラグがtrueに設定されているテキストだけが表示されます(テキスト不透明度を0.99に設定するなど)。残りはFlatViewGroupを使用している可能性が高い親にフラット化されます。
希望に役立ちます。
- 1. VirtualViewManagerとFlatViewManagerの違いは何ですか?ネイティブのアンドロイドの反応
- 2. 反応ネイティブのアンドロイドプロジェクトのキーストアフォルダの目的は何ですか
- 3. 反応するネイティブfirebaseでfirebase.app()を呼び出す目的は何ですか?
- 4. ネイティブのアンドロイドのクラッシュに反応する
- 5. 反応ネイティブのアンドロイドのバックグラウンドサービス
- 6. ネイティブに反応するかネイティブで反応を開始する
- 7. レルム - ネイティブで目的に反するC
- 8. ネイティブで反応するwebsocketのタイプは何ですか?
- 9. AccountManager(アンドロイド)の目的は何ですか?
- 10. socket.io-clientはネイティブのアンドロイドに反応しますか?
- 11. 反応ネイティブのアンドロイドのgenymotionエラーjava.util.concurrent.ExecutionException:
- 12. 反応ネイティブのテキストエリアの代替手段は何ですか?
- 13. IOSの反応ネイティブをアンドロイドで動かす
- 14. アンドロイドでネイティブのrefeshコントロールを反応させますか?
- 15. ネイティブのアンドロイドmoveTaskToBackに反応しますか?
- 16. Javascriptアラートがアンドロイドで反応しない反応ネイティブwebview
- 17. アンドロイドのゲノム運動と反応したネイティブでエラーが意味するものは何ですか?
- 18. 反応ネイティブのアンドロイド - PDFファイルをアンドロイドファイルシステムに保存する方法
- 19. 反応ネイティブをサポートするアンドロイドでグラフ/チャートを作成する
- 20. は、ネイティブの反応 -
- 21. 反応するネイティブ・ナビゲーションを反応させ、ネイティブ歩哨iosで
- 22. 反応したネイティブで糸とロックは何ですか?
- 23. 反応し、ネイティブ:コンポーネントのみ反応するネイティブ・ナビゲーションや反応ナビゲーションを
- 24. 反応ネイティブのアンドロイドでコンポーネント間で値を渡す方法
- 25. は、ネイティブリアクト - アンドロイドを - アラートダイアログcancelable falseはネイティブ反応する新しい
- 26. ネイティブのネイティブの反応ネイティブで
- 27. ネイティブの反応でタスクをスケジュールする最良の方法は何ですか?
- 28. は反応するネイティブ
- 29. は、ネイティブ反応する
- 30. BackHandler.removeEventListenerは、アンドロイドのネイティブで反応しませんでした。
患者と優れた説明をいただきありがとうございます。 *最初にmMountsToViewフラグがfalseに設定されたRCTTextは、対応するFlatViewGroupも作成され、FlatViewGroup(RCTText)は 'onDraw()'を受け取らないことを除いてRCTTextのすべてのスタイルとコンテンツを持ちます。その親からまたはそれがtrueに設定されるまで、アンドロイドのビューツリーでexsitしません。 * 'ReactSliderShadowNode'がRCTViewの内部にあると仮定すると、RCTViewのmMountsToViewはtrueまたはfalseに設定されます。 flatshadowNodeの中にnon-flatshadowNodeを描画する方法。 – York
mMountsToViewがfalseの場合、FlatViewGroupは作成されません。 – user2662514
Androidビューが必要なノード(ReactSliderShadowNodeなど)を追加すると、常にNativeViewWrapperでラップされます。 ReactSliderShadowNodeはmMountsToViewフラグを持っていないので、それを持っているノードでそれをラップする必要があります。 NativeViewWrapperはmMountsToViewをtrueに設定し、そのViewManagerはビューの作成を基になるラップされたノードに委譲します。 – user2662514