Так что мне потребовалось немного времени, чтобы разобраться в этом, но суть в том, что использовать функции Arrow и привязку функций в элементах JSX — это плохая практика.

class MyWrongExample extends React.Component<TestInterfaceProps> {
    constructor(props: TestInterfaceProps) {
        super(props);
    }
  
    private handleOnClick = (): void => {
      // Handle on click event
    };
  
    private getButton = (): JSX.Element => {
        // The use of a arrow function here is a bad idea.
        return <button onClick={() => this.handleOnClick()}>Click Me</button>;
    };
  
    public render = (): JSX.Element => {
        return (
            <div><span>{ this.state.notice }</span>{ this.getButton() }</div>
        );
    };
}

В приведенном выше примере мы используем локальное состояние, в этом случае, если состояние изменится, метод `render()` повторно отобразит компонент, однако есть одна загвоздка. Метод getButton, который возвращает элемент JSX, использует встроенную функцию стрелки для обработки события щелчка. Это плохая идея с точки зрения производительности. Каждый раз, когда компонент повторно отображается, функция стрелки воссоздает себя в памяти, добавляя предыдущую ссылку в кучу мусора.

Чтобы разбить его дальше, происходит то, что когда когда-либо вызывается render(), особенно с локальным состоянием, функция стрелки снова назначается новому ссылочному значению. Таким образом, в компоненте реакция увидит его как новое значение для этого свойства, и оно снова будет отображаться.

Таким образом, в списке из 250 результатов поиска и каких-либо изменений в контейнере верхнего уровня реакция проверяет, нужно ли повторно отображать какие-либо дочерние элементы. Если только один из этих дочерних элементов имеет функцию стрелки, или реакция привязки будет повторно отображать все 250 из них.

Эта куча может накапливаться и вызывать перегрузку, особенно если эта функция дескриптора собирает данные, а также замедлять работу пользователя и, возможно, в некоторых случаях вызывать сбой вашего браузера.