# Disallow missing displayName in a React component definition (`react/display-name`)
💼 This rule is enabled in the ☑️ `recommended` [config](https://github.com/jsx-eslint/eslint-plugin-react/#shareable-configs).
DisplayName allows you to name your component. This name is used by React in debugging messages.
## Rule Details
Examples of **incorrect** code for this rule:
```jsx
var Hello = createReactClass({
render: function() {
return
Hello {this.props.name}
;
}
});
const Hello = React.memo(({ a }) => {
return <>{a}>
})
export default ({ a }) => {
return <>{a}>
}
```
Examples of **correct** code for this rule:
```jsx
var Hello = createReactClass({
displayName: 'Hello',
render: function() {
return Hello {this.props.name}
;
}
});
const Hello = React.memo(function Hello({ a }) {
return <>{a}>
})
```
## Rule Options
```js
...
"react/display-name": [, { "ignoreTranspilerName": , "checkContextObjects": }]
...
```
### `ignoreTranspilerName` (default: `false`)
When `true` the rule will ignore the name set by the transpiler and require a `displayName` property in this case.
Examples of **correct** code for `{ ignoreTranspilerName: true }` option:
```jsx
var Hello = createReactClass({
displayName: 'Hello',
render: function() {
return Hello {this.props.name}
;
}
});
module.exports = Hello;
```
```jsx
export default class Hello extends React.Component {
render() {
return Hello {this.props.name}
;
}
}
Hello.displayName = 'Hello';
```
```jsx
export default function Hello({ name }) {
return Hello {name}
;
}
Hello.displayName = 'Hello';
```
Examples of **incorrect** code for `{ ignoreTranspilerName: true }` option:
```jsx
var Hello = createReactClass({
render: function() {
return Hello {this.props.name}
;
}
});
module.exports = Hello;
```
```jsx
export default class Hello extends React.Component {
render() {
return Hello {this.props.name}
;
}
}
```
```jsx
module.exports = createReactClass({
render: function() {
return Hello {this.props.name}
;
}
});
```
```jsx
export default class extends React.Component {
render() {
return Hello {this.props.name}
;
}
}
```
```jsx
function HelloComponent() {
return createReactClass({
render: function() {
return Hello {this.props.name}
;
}
});
}
module.exports = HelloComponent();
```
### checkContextObjects (default: `false`)
`displayName` allows you to [name your context](https://reactjs.org/docs/context.html#contextdisplayname) object. This name is used in the React dev tools for the context's `Provider` and `Consumer`.
When `true` this rule will warn on context objects without a `displayName`.
Examples of **incorrect** code for this rule:
```jsx
const Hello = React.createContext();
```
```jsx
const Hello = createContext();
```
Examples of **correct** code for this rule:
```jsx
const Hello = React.createContext();
Hello.displayName = "HelloContext";
```
```jsx
const Hello = createContext();
Hello.displayName = "HelloContext";
```
## About component detection
For this rule to work we need to detect React components, this could be very hard since components could be declared in a lot of ways.
For now we should detect components created with:
- `createReactClass()`
- an ES6 class that inherit from `React.Component` or `Component`
- a stateless function that return JSX or the result of a `React.createElement` call.