React.Fragment
The React.Fragment
component, which can be used with a special <></>
syntax, lets you use multiple elements in place of one, without wrapping them in any other container element:
function Component() {
return (
<>
<OneChild />
<AnotherChild />
</>
);
}
Fragment
is useful because grouping elements with Fragment
has no effect on layout or styles, unlike if you wrapped the elements in some other container such as a DOM element.
Usage
Returning multiple elements
Use Fragment
to group multiple elements together. You can use it to put multiple elements in any place where a single element can go. For example, a component can only return one element, but by using Fragment
you can group multiple elements together and then return them as a group:
function Notification() {
return (
<>
<NotificationTitle />
<NotificationBody />
</>
);
}
You usually use Fragment
with a special syntax, the empty JSX tag <></>
, that is equivalent to writing <React.Fragment></React.Fragment>
.
Assigning multiple elements to a variable
Like any other element, you can assign Fragment
elements to variables, pass them as props, and so on:
function CloseDialog() {
const buttons = (
<>
<OKButton />
<CancelButton />
</>
);
return (
<AlertDialog buttons={buttons}>
Are you sure you want to leave this page?
</AlertDialog>
);
}
Grouping elements with text
You can use Fragment
to group text together with components:
function DateRangePicker({start, end}) {
return (
<>
From
<DatePicker date={start} />
to
<DatePicker date={end} />
</>
);
}
Rendering a list of Fragments
Here’s a situation where you need to write React.Fragment
explicitly instead of using the <></>
syntax: When you render multiple elements in a loop, you need to assign a key
to each element. If the elements within the loop are Fragments, you need to use the normal JSX element syntax in order to provide the key
attribute:
function BlogPosts(posts) {
return posts.map(() =>
<React.Fragment key={post.id}>
<Heading>{post.title}</Heading>
<BlogPostBody post={post} />
</React.Fragment>
);
}
Reference
React.Fragment
Wrap elements in <React.Fragment>
to group them together in situations where you need a single element. Grouping elements in Fragment
has no effect on the resulting DOM; it is the same as if the elements were not grouped. The empty JSX tag <></>
is shorthand for <React.Fragment></React.Fragment>
in most cases.
Props
- optional
key
: Fragments declared with the explicit<React.Fragment>
syntax may have keys.