Can I add a key prop to a React fragment?

JavascriptReactjsJsx

Javascript Problem Overview


I am generating a dl in React:

<dl>
  {
    highlights.map(highlight => {
      const count = text.split(highlight).length - 1;

      return (
        <>
          <dt key={`dt-${highlight.id}`}>{highlight}</dt>
          <dd key={`dd-${highlight.id}`}>{count}</dd>
        </>
      );
    })
  }
</dl>

This gives me the warning:

> Warning: Each child in a list should have a unique "key" prop.

This will remove the warning, but doesn't generate the HTML I want:

<dl>
  {
    highlights.map(highlight => {
      const count = text.split(highlight).length - 1;

      return (
        <div key={highlight.id}>
          <dt>{highlight}</dt>
          <dd>{count}</dd>
        </div>
      );
    })
  }
</dl>

And I cannot add a key prop to a fragment (<> </>).

How can work around this?


I am using React 16.12.0.

Javascript Solutions


Solution 1 - Javascript

To add a key to a fragment you need to use full Fragment syntax:

<React.Fragment key={your key}>
...
</React.Fragment>

See docs here https://reactjs.org/docs/fragments.html#keyed-fragments

Solution 2 - Javascript

Yes, you can add a key in the below form Fragment which is not possible in the shorter version of Fragments(i.e, <>)

<Fragment key={your key}></Fragment>

For Reference

Solution 3 - Javascript

You can also use this way to auto assign key to your component list

React.Children.toArray(someData.map(data=><div>{data.name}</div>))

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsdgfsdhView Question on Stackoverflow
Solution 1 - JavascriptdemkovychView Answer on Stackoverflow
Solution 2 - JavascriptMukesh BhatiView Answer on Stackoverflow
Solution 3 - JavascriptMaqsood AhmedView Answer on Stackoverflow