React fragments were a feature released in React 16.2. They have been around for a while now but have been a relatively lesser used feature. Let us explore the what and why the feature exists.
React fragments are a syntactic addition to React that allow wrapping or grouping of multiple HTML elements without the need for any additional DOM nodes. We mostly come across this situation when a React component needs to return multiple elements.
The traditional approach has been to wrap them in a div element because a React component can return only one element. This behavior results in useless additional markup and also makes the DOM tree heavy with additional layers of divs.
The traditional solution to render 3 child components in a single component would have been:
const App = () => {
return (
<div>
<ChildA />
<ChildB />
<ChildC />
</div>
);
}
JavaScriptWith fragments, this can be:
const App = () => {
return (
<React.Fragment>
<ChildA />
<ChildB />
<ChildC />
</React.Fragment>
);
}
JavaScriptNote: React.Fragment can also be replaced by empty tags as <></>.
const App = () => {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
JavaScriptThere are 3 typical use cases for fragments.
This one is the typical use case for fragments. As discussed above, using fragments avoids additional div containers that can make the DOM heavy and also often cause problems when styling things.
Fragments make it easier to conditionally render groups of elements without any extra markup.
const Login = ({isLoggedIn, name}) => {
{isLoggedIn ? (
<>
<h3>Welcome {name}</h3>
<p>
You are logged in!
</p>
</>
) : (
<>
<h3>Login</h3>
<input type="text" id="username" />
<input type="password" id="password" />
<input type="submit" value="Login" />
</>
)}
}
JavaScriptFragments can have key props! This is yet another powerful feature that can be pretty handy at times. This cannot be used with the empty tags though.
This can be helpful when rendering lists, such as:
const Glossary = ({items}) => {
return (
<>
{items.map(item => (
// Without the `key`, React will fire a key warning
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
</>
);
}
JavaScriptAnd that is all there is to know about React fragments!
I am terrible at optimizing my keyboard layout for anything. But off lately, my little…
I recently switched completely to the Brave browser and have set ad blocking to aggressive…
I was preparing a slide deck for a hackathon and decided to put in a…
I have been using npx a lot lately, especially whenever I want to use a…
Manually copy-pasting the output of a terminal command with a mouse/trackpad feels tedious. It is…
While working on a project, I wanted to do an integrity check of a file…