[解決済み】React 16のFragmentは、なぜコンテナDivよりも優れているのでしょうか?
2022-04-11 23:24:08
質問
React 16.2では、以下のサポートが改善されました。
Fragments
が追加されました。詳細はReactのブログ記事でご確認ください。
をご覧ください。
次のようなコードでおなじみです。
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
たしかにコンテナ div は必要ですが、それほど大きな問題ではありません。
React 16.2では、周囲のコンテナdivを回避するために、このようなことができるようになりました。
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
いずれの場合も、内部要素を囲むコンテナ要素が必要であることに変わりはありません。
私の疑問は、なぜ
Fragment
が望ましいのでしょうか?パフォーマンスに貢献するのでしょうか?もしそうなら、それはなぜですか?洞察が欲しいです。
解決方法は?
- ほんの少し速くなり、メモリ使用量も少なくなります(余分なDOMノードを作成する必要がない)。これは非常に大きなツリーや深いツリーでしか効果がありませんが、アプリケーションのパフォーマンスはしばしば千載一遇の苦しみに見舞われます。これは1つ少ないカットです。
-
Flexbox や CSS Grid など一部の CSS 機構は特殊な親子関係を持っており、CSS Grid に親子関係を記述するために
div
を使用すると、論理的なコンポーネントを抽出する際に、目的のレイアウトを維持することが困難になります。 - DOMインスペクタがごちゃごちゃしなくなった :-)
その他の使用例については、こちらのReact issueで解説しています。 レンダーから複数のコンポーネントを返せるようにフラグメント API を追加する。
関連
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】Reactコンポーネント内でswitchステートメントを使用するには?
-
[解決済み] React テキストを挟んだ横長の仕切りを作る
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] Uncaught (in promise) Error: リクエストに失敗、ステータスコード404
-
React はエラー TypeError を報告します。未定義のプロパティ 'XX' を読み取ることができない、問題は解決されました。
-
[解決済み] アクシオスは定義されていません
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] reactのsetStateメソッドを呼んでも、すぐにステートが変更されないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] react router dom v4でwebpack dev serverを構成する方法は?
-
[解決済み] React - _this2.SetStateは関数ではありません。
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] カスタマイズ素材UI チェックした場合としない場合の切り替え
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] React QueryとReduxの主な違いは何ですか?
-
[解決済み] Reactでグローバル変数を宣言する方法とは?
-
[解決済み] React」は定義される前に使用されていた