no-missing-component-display-name
Rule category
Debug.
What it does
Enforces that all components have a displayName
or name
which React can use as its displayName
in devtools.
Why is this bad?
When defining a React component, if you specify its component name in a way that React can’t infer its displayName
, it will show up as an anonymous
component in devtools, which makes debugging more difficult.
Examples
Failing
import React from "react";
const const Button: React.MemoExoticComponent<() => React.JSX.Element>
Button = React.function React.memo<() => React.JSX.Element>(Component: () => React.JSX.Element, propsAreEqual?: ((prevProps: Readonly<unknown>, nextProps: Readonly<unknown>) => boolean) | undefined): React.MemoExoticComponent<() => React.JSX.Element> (+1 overload)
Lets you skip re-rendering a component when its props are unchanged.memo(() => <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />);
// - Missing 'displayName' for component.
import React from "react";
const const Button: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>
Button = React.function React.forwardRef<unknown, {}>(render: React.ForwardRefRenderFunction<unknown, {}>): React.ForwardRefExoticComponent<React.PropsWithoutRef<{}> & React.RefAttributes<unknown>>
Lets your component expose a DOM node to a parent component
using a ref.forwardRef(() => <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />);
// - Missing 'displayName' for component.
(Not supported yet)
import React from "react";
export default () => <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />;
// - Missing 'displayName' for component.
Passing
import React from "react";
const const Button: React.NamedExoticComponent<object>
Button = React.function React.memo<object>(Component: React.FunctionComponent<object>, propsAreEqual?: ((prevProps: object, nextProps: object) => boolean) | undefined): React.NamedExoticComponent<object> (+1 overload)
Lets you skip re-rendering a component when its props are unchanged.memo(function function (local function) Button(): React.JSX.Element
Button() {
return <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />;
});
import React from "react";
const const Button: React.MemoExoticComponent<() => React.JSX.Element>
Button = React.function React.memo<() => React.JSX.Element>(Component: () => React.JSX.Element, propsAreEqual?: ((prevProps: Readonly<unknown>, nextProps: Readonly<unknown>) => boolean) | undefined): React.MemoExoticComponent<() => React.JSX.Element> (+1 overload)
Lets you skip re-rendering a component when its props are unchanged.memo(() => <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />);
const Button: React.MemoExoticComponent<() => React.JSX.Element>
Button.React.NamedExoticComponent<unknown>.displayName?: string | undefined
Used in debugging messages. You might want to set it
explicitly if you want to display a different name for
debugging purposes.displayName = "Button";
import React from "react";
const const Button: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>
Button = React.function React.forwardRef<unknown, {}>(render: React.ForwardRefRenderFunction<unknown, {}>): React.ForwardRefExoticComponent<React.PropsWithoutRef<{}> & React.RefAttributes<unknown>>
Lets your component expose a DOM node to a parent component
using a ref.forwardRef(function function (local function) Button(): React.JSX.Element
Button() {
return <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />;
});
import React from "react";
const const Button: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>
Button = React.function React.forwardRef<unknown, {}>(render: React.ForwardRefRenderFunction<unknown, {}>): React.ForwardRefExoticComponent<React.PropsWithoutRef<{}> & React.RefAttributes<unknown>>
Lets your component expose a DOM node to a parent component
using a ref.forwardRef(() => <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />);
const Button: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>
Button.React.NamedExoticComponent<React.RefAttributes<unknown>>.displayName?: string | undefined
Used in debugging messages. You might want to set it
explicitly if you want to display a different name for
debugging purposes.displayName = "Button";
import React from "react";
export default function function Button(): React.JSX.Element
Button() {
return <JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div />;
}