What is React component 'displayName' is used for?

ReactjsEslint

Reactjs Problem Overview


I know that is it considered a good practice to name react component by adding a displayName property, but not sure I know why. In react docs, it say:

> The displayName string is used in debugging messages. JSX sets this value automatically; see JSX in Depth.

Why is is so important? what will happen if I won't add it? (so far I didn't have it and had no issues debugging)

Are there any recommendations / good practices on how to name the components?

Reactjs Solutions


Solution 1 - Reactjs

I have always set displayName to the same name as the variable I am assigning it to. This would have been used in development builds as it is removed through dead-code elimination on production builds and should not be relied on within your application.

As for where it is used, that is mainly within react error messaging. This is why it is mentioned to be valuable for debugging. If no name can be derived the error messages default to say Component which is extremely difficult to debug, when you have any more than 1 component in your project.

Here are a few error messages that reference displayName in the react source:

Invalid Return

Inline style error

Solution 2 - Reactjs

this article helped me:

https://stackoverflow.com/questions/41216782/how-do-i-get-string-name-of-react-native-component-class

    class CardGroup extends Component {
      render() {
        return (
          <div>{this.props.children}</div>
        )
      }
    }
    CardGroup.propTypes = {
      children: function (props, propName, componentName) {
        const prop = props[propName]

        let error = null
        React.Children.forEach(prop, function (child) {
          if (child.type !== Card) {
            error = new Error('`' + componentName + '` children should be of type `Card`.');
          }
        })
        return error
      }
    }

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
QuestionKufView Question on Stackoverflow
Solution 1 - ReactjskwelchView Answer on Stackoverflow
Solution 2 - ReactjsEdward KoetsjarjanView Answer on Stackoverflow