component は single root element を返す必要がありますが、そのルールを満たすためだけに余分な wrapper <div> を追加したくないことがよくあります(flex/grid のような CSS layout や、table のような HTML 構造を壊すことがあります)。Fragment は DOM node を追加せずに children をまとめます。
jsx
function TableRow() {
(
);
}
ここで代わりに <div> を使うと、不正な HTML(<tr><div><td>…)になり、table が壊れます。Fragment は 2 つの <td> だけを render します。
<>...</> // short syntax(最も一般的)
<React.Fragment key={item.id}> // full syntax — key を渡す必要があるときに使う
...
</React.Fragment>
fragment の list を render する場合は full form を使います。short <> は key を受け取れないためです。
{items.map(item => (
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.def}</dd>
</React.Fragment>
))}
Fragment は DOM を clean に保ち(不要な wrapper div を増やさない)、semantic/layout-sensitive な構造を壊さず、node 数も少し減らします。しかも runtime cost はありません。